我的每个像素的结构如下:
...........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
这表明出了点问题。
我如何正确地将它们组装回来?