【发布时间】:2013-06-11 15:56:02
【问题描述】:
我的每个像素的结构如下:
...........PIXEL............
[red | green | blue | alpha]
<-8--><--8---><--8--><--8-->
我需要执行以下操作:
1. 提取 RGBA 值
2. 对 RGB 值和非 A 值进行一些计算。
3. 将它们重新组合在一起以形成具有新值的像素。
这是我的做法:
for(int i = 0;i < img.pixels.length;i++){
int pixel = img.pixels[i];
int red = (pixel & 0xFF000000) >>> 24;
int green = (pixel & 0x00FF0000) >>> 16;
int blue = (pixel & 0x0000FF00) >>> 8;
int alpha = (pixel & 0x000000FF);
println("Red: " + red + " Green: " + green + " Blue: " + blue + " Alpha: " + alpha);
/*
* Luminosity Method.
*/
red = (int) (red * 0.21);
green = (int) (green * 0.71);
blue = (int) (blue * 0.07);
/*
* Assemble them back again
*/
red = red << 24;
green = green << 16;
blue = blue << 8;
println("AvgRed : " + red + " AvgGreen: " + green + " AvgBlue: " + blue);
pixel= red | green | blue | alpha;
img.pixels[i] = pixel;
}
updatePixels();
但是我再次转移他们的位置来组装他们似乎有问题。
我在控制台中有如下值:
Red: 255 Green: 83 Blue: 100 Alpha: 82 // actual values
AvgRed : 889192448 AvgGreen: 3801088 AvgBlue: 1792 // new values after calculation and shifting
这表明有问题。
我如何正确地将它们组装回来?
【问题讨论】:
-
@BrianRoach 像素是 RGBA 形式还是 ARGB?
-
我认为是 ARGB,但它并没有改变问题。
-
@LittleChild - 这有关系吗?比特就是比特;那里的答案解释了如何将它们移入和移出。
-
@BrianRoach 是的,我需要更改 RGB 通道而不是 Alpha 通道。
标签: java processing bitwise-operators