【发布时间】:2016-01-03 14:34:10
【问题描述】:
我有一种方法可以在 Java 中更改 BufferedImage 的 alpha 值。这是我的代码:
public static void setAlpha(BufferedImage img, byte alpha) {
alpha %= 0xff;
for (int cx=0;cx<img.getWidth();cx++) {
for (int cy=0;cy<img.getHeight();cy++) {
int color = img.getRGB(cx, cy);
color &= 0x00ffffff;
color |= (alpha << 24);
img.setRGB(cx, cy, color);
}
}
}
当我使用此功能时,图像中之前透明的所有区域都会变黑。为什么?
编辑:
非常感谢您的帮助。现在我想通了,问题出在哪里。这是我的工作功能:
public static void changeAlpha(BufferedImage img, float alphaPercent) {
for (int cx=0;cx<img.getWidth();cx++) {
for (int cy=0;cy<img.getHeight();cy++) {
int color = img.getRGB(cx, cy);
byte alpha = (byte) (color >> 24);
alpha = (byte) ((float) (int) (alpha & 0xff) * alphaPercent);
color &= 0x00ffffff;
color |= ((alpha & 0xff) << 24);
img.setRGB(cx, cy, color);
}
}
}
【问题讨论】:
-
...一个疯狂的猜测:因为
set**RGB**只设置红色、绿色和蓝色? -
@Jongware 命名错误,也许,但不是。所有
get/setRGB方法都适用于 sRGB 颜色空间中的 32 位 ARGB 值。 -
你的
BufferedImage是什么类型的? -
alpha %= 0xff中的 modulus 是您实际要使用的(因此257的输入值将存储为2),或者您是将其与max(alpha, 255)之类的东西混淆?
标签: java colors png bufferedimage alpha