Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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_Image Processing - Fatal编程技术网

用java在灰度图像中写入像素数据

用java在灰度图像中写入像素数据,java,image,image-processing,Java,Image,Image Processing,我正在开发一个关于图像处理的项目,在那里我必须填充破裂绘画的数字化图像。我必须将彩色图像转换为灰度,对灰度图像的2D数组执行一些计算,然后将其写回灰度图像。这方面的代码是: BufferedImage colorImage=ImageIO.read(new File(strImagePath)); BufferedImage image = new BufferedImage(colorImage.getWidth(),colorImage.getHeight(),Bu

我正在开发一个关于图像处理的项目,在那里我必须填充破裂绘画的数字化图像。我必须将彩色图像转换为灰度,对灰度图像的2D数组执行一些计算,然后将其写回灰度图像。这方面的代码是:

BufferedImage colorImage=ImageIO.read(new File(strImagePath));

            BufferedImage image = new BufferedImage(colorImage.getWidth(),colorImage.getHeight(),BufferedImage.TYPE_BYTE_GRAY);
            Graphics g = image.getGraphics();
            g.drawImage(colorImage, 0, 0, null);
            g.dispose();

            ImageIO.write(image,"PNG",new File("Image.PNG"));

            BufferedImage imgOriginal=ImageIO.read(new File("Image.PNG"));

            int width=image.getWidth();
            int height=image.getHeight();

            BufferedImage im=new BufferedImage(width,height,BufferedImage.TYPE_BYTE_GRAY);

            int arrOriginal[][]=new int[height][width];


            for(int i=0;i<height;i++)
                for(int j=0;j<width;j++)
                    arrOriginal[i][j]=imgOriginal.getRGB(j,i)& 0xFF;

            for(int i=0;i<height;i++)
                for(int j=0;j<width;j++)
                    im.setRGB(j,i,arrOriginal[i][j]);

            ImageIO.write(im,"PNG",new File("Image1.PNG"));
buffereImage colorImage=ImageIO.read(新文件(strImagePath));
BuffereImage image=新的BuffereImage(colorImage.getWidth(),colorImage.getHeight(),BuffereImage.TYPE_BYTE_GRAY);
Graphics g=image.getGraphics();
g、 drawImage(colorImage,0,0,null);
g、 处置();
write(image,“PNG”,新文件(“image.PNG”);
buffereImage imgOriginal=ImageIO.read(新文件(“Image.PNG”);
int width=image.getWidth();
int height=image.getHeight();
BuffereImage im=新的BuffereImage(宽度、高度、BuffereImage.TYPE_BYTE_GRAY);
原始整数[][]=新整数[高度][宽度];

对于(int i=0;i我对基于Java的图像处理一无所知,但我对一般的图像处理有相当多的了解,所以我会看看是否能给你一些想法。如果我错了,请不要开枪——我只是在建议一个想法

在灰度图像中,红色、绿色和蓝色的值都是相同的,即红色=绿色=蓝色。因此,当您调用getRGB并使用0xff执行and时,您可能只得到蓝色分量,但这没关系,因为红色和绿色是相同的-因为它是灰度的

我怀疑问题在于,当您写回创建新的输出图像时,您只设置了蓝色分量,而不是红色和绿色分量,它们应该仍然相同。请尝试写回

original pixel + (original pixel << 8 ) + (original pixel <<16)

original pixel+(original pixel我对基于Java的图像处理一无所知,但我对图像处理有很多了解,所以我会看看是否能给你一些想法。如果我错了,请不要开枪——我只是在建议一个想法

在灰度图像中,红色、绿色和蓝色的值都是相同的,即红色=绿色=蓝色。因此,当您调用getRGB并使用0xff执行and时,您可能只得到蓝色分量,但这没关系,因为红色和绿色是相同的-因为它是灰度的

我怀疑问题在于,当您写回创建新的输出图像时,您只设置了蓝色分量,而不是红色和绿色分量,它们应该仍然相同。请尝试写回

original pixel + (original pixel << 8 ) + (original pixel <<16)

原始像素+(原始像素您应该被告知firefox和chrome不使用相同的颜色渲染png,它也可以来自java渲染引擎。@Kiwy我使用的是javax.swing,因为我的项目是一个独立的项目。另请参阅,您应该被告知firefox和chrome不使用相同的颜色渲染png,它可以来自java渲染引擎还有一个引擎。@Kiwy我正在使用javax.swing,因为我的项目是一个独立的项目。另请参阅,感谢您的回复。现在我正在恢复原始图像。很抱歉,我不能投票支持您,因为我的声誉不允许我……感谢您的回复。现在我正在恢复原始图像。很抱歉,我不能投票支持您,因为我的声誉不允许我不允许我。。。