如果我们使用ARGB和ARGB_PRE(ARGB但使用预乘alpha)拍摄每像素32位图片,那么当alpha完全打开时,这些值是否相同(即:根本没有透明度)?
例如,如果我有一个具有以下值的ARGB像素: 0xFF808080 (这是一个阴影灰色,没有任何透明度,因为alpha处于其最大值:255),这会变成什么在ARGB_PRE?
我怎么能自己发现这个?是否足以使用ARGB和其他ARGB_PRE实例化一个缓冲图像并在两者上使用 setRGB(...)然后比较 int 我会回来吗? / p>
例如,如果我这样做:
final BufferedImage bi1 = new BufferedImage(10,10,BufferedImage.TYPE_INT_ARGB);
final BufferedImage bi2 = new BufferedImage(10,10,BufferedImage.TYPE_INT_ARGB_PRE);
bi1.setRGB(0,0,0xFF808080);
bi2.setRGB(0,0,0xFF808080);
System.out.println("bi1: " + Integer.toHexString(bi1.getRGB(0, 0)));
System.out.println("bi2: " + Integer.toHexString(bi2.getRGB(0, 0)));
我为两者取回了相同的值,但这是正常的,这是我给予的价值。
基本上我的问题归结为:如果图片没有单个像素 透明,我可以在ARGB和ARGB_PRE模式下使用完全相同的值生成完全相同的图片吗?
或者采用这种方式:如果我没有任何透明像素,那么ARGB和ARGB_PRE基本相同吗?
答案 0 :(得分:1)
预乘alpha表示存储在图像数据中的颜色乘以alpha,因此在合成(绘图)时不需要乘以它们。 这并没有改变绘制时图像的外观,但它的数据是如何存储的......
顺便说一句,如果你的图像只有255的alpha值(255在合成中意味着1.0f)那么结果颜色总是1 *颜色=颜色(没有改变)
答案 1 :(得分:1)
是。你的理解是正确的。