无法从各个BufferedImage像素中获取正确的Alpha值

时间:2014-12-22 23:16:34

标签: java image swing alpha

我需要获取RGBA值,修改RGB,然后再次设置RGB(和A)值。

然而,它似乎为所有像素返回255,即使我知道我正在加载的图像中有透明像素。

这是一个SSCCE

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class TestImage {

    public static void main(String args[]) {
        try {
            BufferedImage image = ImageIO.read(new File("/home/affy/Pictures/salamenceavatar.png"));

            BufferedImage buff = new BufferedImage(
                    image.getWidth(),
                    image.getHeight(),
                    BufferedImage.TYPE_INT_ARGB
            );

            Graphics2D g = buff.createGraphics();
            g.drawImage(image, 0, 0, null);

            for(int x = 0; x < image.getWidth(); x++) {
                for(int y = 0; y < image.getHeight(); y++) {
                    Color c = new Color(buff.getRGB(x, y));
                    int alpha = c.getAlpha();
                    System.out.println(alpha);
                }
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:3)

使用Color(int, boolean)代替,传递true告诉您要从提供的包装int中提取alpha值

Color c = new Color(buff.getRGB(x, y), true);

来自JavaDocs ......

  

使用指定的组合RGBA值创建sRGB颜色   由位24-31中的alpha分量组成,红色分量在   位16-23,位8-15中的绿色分量和蓝色分量   在0-7位。如果hasalpha参数为false,则alpha默认为   255.

参数:

rgba - 组合的RGBA分量
hasalpha - 如果alpha位有效则为真;假   否则