我无法将颜色更改应用于图像的像素。它必须通过计算来完成,例如这是我用于灰度的代码,它可以正常工作:
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的版本进行了修改。 (我没有使用缓冲图像)。 convert a RGB image to grayscale Image reducing the memory in java答案 0 :(得分:0)
没关系,我一直在玩它并意识到我做错了什么。当我只需要使用已经存在的像素变量时,我正在为像素声明一个新的int变量。像这样:
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);
pixel = (alpha << 24) | (red << 16) | (0 << 8) | 0;
writer.setArgb(x, y, pixel);
}
}
kittenImage.setImage(newImage);
所以代替&#34; int redLevel&#34;它只是早先声明的像素,而且效果很好。希望这可以帮助别人。