在JavaFX中将彩色图像更改为红色、绿色或蓝色 [英] Change a color image to red, green or blue in Javafx

查看:0
本文介绍了在JavaFX中将彩色图像更改为红色、绿色或蓝色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

将颜色更改应用于图像像素时遇到问题。它必须通过计算来完成,例如,这是我正在使用的灰度代码,它运行得很好:

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

推荐答案

没关系,我一直在玩它,并意识到我做错了什么。当我只需要使用已经存在的像素变量时,我正在为像素声明一个新的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",而是前面声明的像素,而且工作得很好。希望这能帮助其他人。

这篇关于在JavaFX中将彩色图像更改为红色、绿色或蓝色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆