【问题标题】:Change a color image to red, green or blue in Javafx在 Javafx 中将彩色图像更改为红色、绿色或蓝色
【发布时间】:2017-08-19 13:56:11
【问题描述】:

我无法将颜色更改应用于图像的像素。它必须通过计算来完成,例如这是我用于灰度的代码,它工作正常:

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

这是 Argb 版本:http://skrb.hatenablog.com/entry/2013/01/07/171901

【问题讨论】:

    标签: image javafx colors pixel calculation


    【解决方案1】:

    没关系,我一直在玩它并意识到我做错了什么。当我只需要使用已经存在的像素变量时,我为像素声明了一个新的 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);
    

    因此,它只是较早声明的像素,而不是“int redLevel”,而且效果很好。希望这可以帮助其他人。

    【讨论】:

      猜你喜欢
      • 2011-10-28
      • 1970-01-01
      • 2013-12-19
      • 2014-08-26
      • 1970-01-01
      • 2019-02-07
      • 2022-07-02
      • 2018-09-15
      • 1970-01-01
      相关资源
      最近更新 更多