我需要获取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();
}
}
}
答案 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位有效则为真;假 否则