比方说,如果我们使用ARGB和ARGB_PRE (ARGB,但带有预乘alpha)来获取每像素32位的图片,那么当alpha完全打开时(即:根本没有透明度),这些值是否相同?
例如,如果我有一个具有以下值的ARGB像素: 0xFF808080 (这是一个阴影灰色,没有任何透明度,因为alpha位于最大值: 255),那么在ARGB_PRE中会变成什么呢?
我怎么才能自己找出来呢?使用ARGB和另一个ARGB_PRE并使用setRGB(.)实例化一个缓冲映像是否足够?然后比较我能得到的整数吗?
例如,如果我这样做:
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基本上是相同的吗?
发布于 2011-10-26 15:18:23
预乘α意味着存储在图像数据中的颜色被乘以alpha,所以它们在合成(绘图)时不需要被乘以。这不会改变图像绘制时的外观,但它的数据存储方式.
顺便说一句,如果你的图像只有255的alpha值(合成方式是1.0f),那么最终得到的颜色总是1* color = color (不改变)。
发布于 2011-10-26 15:48:20
是。你的理解是正确的。
https://stackoverflow.com/questions/7904372
复制相似问题