簡體   English   中英

BufferedImage的透明區域被寫成黑色

[英]Transparent regions of a BufferedImage are writing out black

我知道這與合成有關,但我無法解決。 在代碼的較早部分,將BufferedImage中的特定像素列表設置為透明黑色:

        for(Pixel p : closed){
            Color c = new Color(image.getRGB(p.x, p.y));
            Color newC = new Color(0,0,0, 0);
            image.setRGB(p.x, p.y, newC.getRGB() & 0x00000000);
        }

        if(andCrop){
            image = image.getSubimage(left, top, right-left, bottom-top);
        }


        return image;

然后我嘗試將圖像寫出:

try {

            BufferedImage out = new BufferedImage(image.getWidth(), image.getHeight(), java.awt.Transparency.TRANSLUCENT);
            Graphics2D g2d = out.createGraphics();
            g2d.setComposite(AlphaComposite.Clear);
            g2d.fillRect(0, 0, image.getWidth(), image.getHeight());
            g2d.setComposite(AlphaComposite.Src);
            g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
            g2d.dispose();

            File outputfile = new File(file);
            ImageIO.write(out, "png", outputfile);
        } catch (IOException e) {

        }

現在,我知道在嘗試將圖像繪制到圖像上之前,“輸出”是清晰的。 我沒有得到的是合成方面的問題。 我不是全透明的,而是全黑的。

使用的所有緩沖圖像均為INT_ARGB。

編輯-這已經解決。 圖像源來自ImageIO.read,返回的BufferedImage不支持alpha。 快速的讀取后轉換使其余代碼可以平穩運行。

我想到的事情...(感謝安德魯):

java.awt.Transparency.TRANSLUCENT = 3
TYPE_INT_ARGB = 2
TYPE_INT_ARGB_PRE = 3

public BufferedImage(int width,
                 int height,
                 int imageType)

Constructs a BufferedImage of one of the predefined image types. (TYPE_...)

http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/image/BufferedImage.html

所以看起來基本上是一個混亂。

此外,什么你想達到什么效果? 您清除一個空白圖像,然后為其繪制完全透明的像素...我只是不明白。

Whelp,現在這已經被否決了,所以我不確定這是否有意義,但是問題是ImageIO正在讀取原始BufferedImage,而該圖像不支持ARGB 快速的讀后轉換使其余代碼可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM