gpt4 book ai didi

java - 改变 rgb 位的 alpha

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:29:49 25 4
gpt4 key购买 nike

我在 java 中设置 buffredimage 的 rgb 的 alpha。此代码更改了 alpha 值,但我无法在保存文件后检索到相同的值。如何克服这个问题。

// ================ Code for setting alpha ===============
int alpha=140;
// alpha value to set in rgb

int b=alpha<<24;
b=b|0x00ffffff;

ialpha.setRGB(0, 0,ialpha.getRGB(0, 0)&b);
// ialpha is a bufferedimage of type TYPE_INT_ARGB

ImageIO.write(ialpha, "png", new File("C:/newimg.png"));
System.out.println("\nFile saved !");

// ================ Code for getting alpha ===============

int val=(ialpha.getRGB(0, 0)&0xff000000)>>24;
if(val<0)
val=256+val;
System.out.println("Returned alpha value:"+val);

这只是返回 255 作为 alpha 值。它不返回我设置的值,即 140。

请帮我找回我之前设置的 alpha 值。

最佳答案

问题出在获取 alpha 的代码中。在第二个移位操作中,您不考虑符号位。

int val=(ialpha.getRGB(0, 0) & 0xff000000) >> 24;

这将给出值 0xffffff8c(假设您的初始 alpha 为 0x8c140)。参见 Bitwise and Bit Shift Operators了解更多详情。特别是:

The unsigned right shift operator ">>>" shifts a zero into the leftmost position, while the leftmost position after ">>" depends on sign extension.

您需要执行以下任一操作:

int val = (ialpha.getRGB(0, 0) & 0xff000000) >>> 24; // shift zero into left

或者:

int val = ialpha.getRGB(0, 0) >> 24) & 0xff; // mask out the sign part

PS:我倾向于后者,因为大多数人(包括我自己)从来不记得 >>> 运算符实际做了什么.. ;-)

关于java - 改变 rgb 位的 alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15831940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com