Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图像泛光填充后的不同颜色_Java_Image_Graphics_Image Processing_Flood Fill - Fatal编程技术网

Java 图像泛光填充后的不同颜色

Java 图像泛光填充后的不同颜色,java,image,graphics,image-processing,flood-fill,Java,Image,Graphics,Image Processing,Flood Fill,我一直在玩这个游戏 我认为代码不是问题所在。如果你有一个更好的,我会很高兴看到(或者如果你知道一个库有这种类型的图像处理,那就更好了) 我的问题是在这张图像上运行算法后,这家伙的头盔不是绿色的而是浅灰色的 我在一个用颜料制作的愚蠢的例子上试过,效果很好。 因此,我认为一定有一些图像设置或类似的东西改变了我在算法中设置的rgb值 您对代码中应设置的内容有何建议(请参见下文) 这是我在测试中使用的图像 那里有一张灰度图像。不能在灰度图像上使用绿色。这就是为什么它会变成浅灰色 您需要: 事先将图像转

我一直在玩这个游戏

我认为代码不是问题所在。如果你有一个更好的,我会很高兴看到(或者如果你知道一个库有这种类型的图像处理,那就更好了)

我的问题是在这张图像上运行算法后,这家伙的头盔不是绿色的而是浅灰色的

我在一个用颜料制作的愚蠢的例子上试过,效果很好。 因此,我认为一定有一些图像设置或类似的东西改变了我在算法中设置的rgb值

您对代码中应设置的内容有何建议(请参见下文)


这是我在测试中使用的图像

那里有一张灰度图像。不能在灰度图像上使用绿色。这就是为什么它会变成浅灰色

您需要:

  • 事先将图像转换为RGB
  • 确保在Java中以RGB格式读取/转换图像
最后一个选项更安全,因为它不会在将来的映像上失败。下面是我在网上找到的一些代码,据说可以转换成灰度。一个小的修改,您就有了确保您正在处理彩色图像所需的内容:

public static BufferedImage convertToGrayscale(BufferedImage source) { 
     BufferedImageOp op = new ColorConvertOp(
       ColorSpace.getInstance(ColorSpace.CS_GRAY), null); 
     return op.filter(source, null);
}

你有一个灰度图像。不能在灰度图像上使用绿色。这就是为什么它会变成浅灰色

您需要:

  • 事先将图像转换为RGB
  • 确保在Java中以RGB格式读取/转换图像
最后一个选项更安全,因为它不会在将来的映像上失败。下面是我在网上找到的一些代码,据说可以转换成灰度。一个小的修改,您就有了确保您正在处理彩色图像所需的内容:

public static BufferedImage convertToGrayscale(BufferedImage source) { 
     BufferedImageOp op = new ColorConvertOp(
       ColorSpace.getInstance(ColorSpace.CS_GRAY), null); 
     return op.filter(source, null);
}

对不起,有什么问题吗?也许我忽略了什么,但我没看到你说出来。@Bart很抱歉,你完全正确。现在我要说清楚。问题是头盔填充的是浅灰色,而不是替换颜色参数中给出的绿色。setRGB和getRGB除了速度惊人地慢之外,还可以在引擎盖下做很多事情,比如根据颜色模型修改r、g、b值等。当我处理“像素”时,我使用以基本int[]为背景的图像并将整数从/写入此int[]。它不仅速度更快,而且您还可以确保您确实在读取和输入所需的r、g、b值。@SyntaxT3rr0r感谢您的评论。我想问一下,您如何从图像和图像获取和设置int数组?对不起,问题是什么?也许我忽略了什么,但我没看到你说出来。@Bart很抱歉,你完全正确。现在我要说清楚。问题是头盔填充的是浅灰色,而不是替换颜色参数中给出的绿色。setRGB和getRGB除了速度惊人地慢之外,还可以在引擎盖下做很多事情,比如根据颜色模型修改r、g、b值等。当我处理“像素”时,我使用以基本int[]为背景的图像并将整数从/写入此int[]。它不仅速度更快,而且您还可以确保您确实在读取和输入所需的r、g、b值。@SyntaxT3rr0r感谢您的评论。我想问一下,您如何从图像和图像获取和设置int数组?就是这样。我已经忘记了显而易见的事情。我一直在处理灰度图像。谢谢:)现在我把图像改成了色阶。但是出于好奇,我将如何在我的示例中使用这些代码。我试图在加载的映像或洪水填充后的映像上使用它,我在java.AWT.image.ComponentColorModel.getDataElements(ComponentColorModel.java:1538)java.AWT.image.buffereImage.setRGB(buffereImage.java:971)的线程“AWT-EventQueue-0”java.lang.NullPointerException中得到相同的空指针异常
异常在test.FloodFillTest.floodFill(FloodFillTest.java:59)…
就是这样。我已经忘记了显而易见的事情。我一直在处理灰度图像。谢谢:)现在我把图像改成了色阶。但是出于好奇,我将如何在我的示例中使用这些代码。我试图在加载的映像或洪水填充后的映像上使用它,我在java.AWT.image.ComponentColorModel.getDataElements(ComponentColorModel.java:1538)java.AWT.image.buffereImage.setRGB(buffereImage.java:971)的线程“AWT-EventQueue-0”java.lang.NullPointerException中得到相同的空指针异常
异常at test.FloodFillTest.floodFill(FloodFillTest.java:59)…