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

发布于 2024-12-12 07:15:52 字数 909 浏览 0 评论 0原文

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

If we take, say, 32-bits per pixel pictures using ARGB and ARGB_PRE (ARGB but with premultiplied alpha), are the values identical when the alpha is fully on (that is: no transparency at all)?

For example if I have an ARGB pixel with the following value: 0xFF808080 (which is a shade gray, without any transparency because the alpha is at its max value: 255), what would this become in ARGB_PRE?

How can I find this out by myself? Is it enough to instanciate one buffered image using ARGB and the other ARGB_PRE and using setRGB(...) on both and then comparing the int I'd get back?

For example if I do this:

    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)));

I get back the same value for both, but it's normal it's the very value I gave.

Basically my question boils down to this: if pictures doesn't have a single pixel being
transparent, can I generate the exact same pictures by using the exact same values both in ARGB and ARGB_PRE modes?

Or formulated this way: if I don't have any transparent pixel, are ARGB and ARGB_PRE basically identical?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你对谁都笑 2024-12-19 07:15:52

预乘alpha意味着图像数据中存储的颜色乘以alpha,因此在合成(绘图)时不需要乘以它们。
这不会改变图像绘制时的外观,但它的数据存储方式...

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

Premultiplied alpha means that colors stored in the image data are multiplied by alpha, so they dont need to be multiplied when composing(drawing).
this doesnt change how image looks when drawed, but how it's data is stored...

BTW if your image only has alpha values of 255 (255 in composing means 1.0f) then resulted color will always be 1 * color = color (not changed)

故人的歌 2024-12-19 07:15:52

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

Yes. Your understanding is correct.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文