我无法将颜色更改应用于图像的像素。它必须通过计算来完成,例如这是我用于灰度的代码,它工作正常:
for (int x = 0; x < w; x++) {
for (int y = 0; y < h; y++) {
int pixel = pixelReader.getArgb(x, y);
int alpha = ((pixel >> 24) & 0xff);
int red = ((pixel >> 16) & 0xff);
int green = ((pixel >> 8) & 0xff);
int blue = (pixel & 0xff);
int avg = (int)(red + green + blue) / 3;
pixel = (alpha << 24) | (avg << 16) | (avg << 8) | avg;
writer.setArgb(x, y, pixel);
}
}
kittenImage.setImage(newImage);
就像我说的,这很好用。我还必须将图片更改为红色、绿色和蓝色,并且我已经使用该代码进行了调整。这是红色过滤器的代码:
for (int x = 0; x < w; x++) {
for (int y = 0; y < h; y++) {
int pixel = pixelReader.getArgb(x, y);
int alpha = ((pixel >> 24) & 0xff);
int red = ((pixel >> 16) & 0xff);
int green = ((pixel >> 8) & 0xff);
int blue = (pixel & 0xff);
int redLevel = (0 << 24) | (red << 16) | (0 << 8) | 0;
writer.setArgb(x, y, -redLevel);
}
}
kittenImage.setImage(newImage);
我曾希望我可以改变最突出的颜色,但该代码只会让我得到一个负面的红色图像,这不是我需要的。
我显然无法在此发布图片,所以我必须弄清楚如何做到这一点以表达我的意思。我一直在研究这个并在灰度上发现了很多,但是红色、蓝色和绿色上的所有东西似乎都指向内置的函数或方法,这不是我想要的。
这只是我的第二个问题,所以如果我需要包含其他信息,请告诉我。
编辑:这是我从中获得灰度的地方,我用另一个使用 Argb 而不是 RGB 的版本对其进行了修改。(我没有使用缓冲图像)。 将RGB图像转换为灰度图像减少java中的内存
这是 Argb 版本:http ://skrb.hatenablog.com/entry/2013/01/07/171901