当alpha已满时,ARGB和ARGB_PRE是否相同?

时间:2011-10-26 14:44:51

标签: java rgb bufferedimage alpha-transparency

如果我们使用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基本相同吗?

2 个答案:

答案 0 :(得分:1)

预乘alpha表示存储在图像数据中的颜色乘以alpha,因此在合成(绘图)时不需要乘以它们。 这并没有改变绘制时图像的外观,但它的数据是如何存储的......

顺便说一句,如果你的图像只有255的alpha值(255在合成中意味着1.0f)那么结果颜色总是1 *颜色=颜色(没有改变)

答案 1 :(得分:1)

是。你的理解是正确的。