1

如果我们使用 ARGB 和 ARGB_PRE(ARGB 但带有预乘 alpha)拍摄每像素 32 位的图片,当 alpha 完全打开(即:根本没有透明度)时,这些值是否相同?

例如,如果我有一个具有以下值的 ARGB 像素:0xFF808080(这是一个阴影灰色,没有任何透明度,因为 alpha 处于最大值:255),这在 ARGB_PRE 中会变成什么?

我怎样才能自己找到这个?使用 ARGB 和另一个 ARGB_PRE 实例化一个缓冲图像并在两者上使用setRGB(...)然后比较我会返回的int是否足以?

例如,如果我这样做:

    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 是否基本相同?

4

2 回答 2

1

预乘 alpha 是指存储在图像数据中的颜色与 alpha 相乘,因此在构图(绘图)时不需要相乘。这不会改变图像在绘制时的外观,但它的数据是如何存储的......

顺便说一句,如果您的图像只有 255 的 alpha 值(255 表示 1.0f),那么结果颜色将始终为 1 * color = color(未更改)

于 2011-10-26T15:18:23.580 回答
1

是的。你的理解是正确的。

于 2011-10-26T15:48:20.117 回答