【问题标题】:How can I get white colored pixel value from gray scale image and replace it with another color?如何从灰度图像中获取白色像素值并将其替换为另一种颜色?
【发布时间】:2016-09-12 04:09:24
【问题描述】:

我试图从 GrayScale 图像中获取 White Colored pixel 的值并将其替换为 another Color 但是当我运行时我的代码,整个 GrayScale 图像被转移到 另一种颜色。 谁能告诉我代码中的错误在哪里,或者我怎样才能得到我想要的结果? 这是代码...

public class gray {
    public static void main (String args[])throws IOException{
        int width;
        int height;

        BufferedImage myImage = null;

        File f = new File("E:\\eclipse\\workspace\\Graphs\\src\\ColorToGray\\1.png");
        myImage = ImageIO.read(f);

        width = myImage.getWidth();
        height = myImage.getHeight();

        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);

        int pixels[];


        pixels = new int[width * height];
        myImage.getRGB(0, 0, width, height, pixels, 0, width);

        for (int i = 0; i < pixels.length; i++) {
            if (pixels[i] == 0xFFFFFF) { 
                pixels[i] = 0x000000FF;
            }
        }
        File f2 = new File("E:\\eclipse\\workspace\\Graphs\\src\\ColorToGray\\out 1.png");
        image.setRGB(0, 0, width, height, pixels, 0, width);
        ImageIO.write( image, "jpg", f2);

    }
}

之前的图片:

Image Before Output

图片之后:

Image After Output

【问题讨论】:

    标签: java pixels grayscale


    【解决方案1】:

    我查了一下,发现了一堆问题。

    首先,在指定要保存的文件名时,您提供“.png”扩展名,但是当您调用ImageIO.write() 函数时,您指定文件类型“jpg”。这往往不能很好地工作。如果您尝试打开生成的文件,大多数程序会给您“这不是一个有效的 .PNG 文件”错误。 Windows 资源管理器试图变得聪明,并将 .PNG 重新解释为 .JPG,但这使您免于发现错误的机会。

    这可以解决奇怪的发红问题。

    但是,如果您在ImageIO.write() 中指定“png”,您仍然无法获得正确的图像。人们会期望一张看起来与原始图像基本相同的图像,在过去是亮白色的地方只有几块蓝色,但我们得到的是原始图像的整体更亮的版本。

    我没有足够的时间查看您的原始图像以找出它的真正问题,但我怀疑它实际上是一个带有 alpha 蒙版的明亮图像,使其看起来不那么明亮,并且有一些东西保存图像的方式有问题,它会去除 alpha 信息,从而明显增加亮度。

    所以,我用另一个我知道其中没有任何技巧的图像尝试了您的代码,但您的代码似乎仍然没有做任何事情。事实证明,您从 myImage.getRGB(); 获得的 int 值的 ARGB 格式为“A”返回 255,这意味着您需要检查 0xFFFFFFFF,而不是 0x00FFFFFF。

    当然,当你替换一个值时,你必须用 0xFF0000FF 替换它,指定一个完整的 alpha 值。用 0x000000FF 替换一个像素没有可见的效果,因为无论高蓝色值如何,alpha 都是零,所以像素会被渲染为透明。

    【讨论】:

      猜你喜欢
      • 2015-12-19
      • 2012-08-24
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 2020-12-09
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多