Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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
使用setRGB后如何在java中显示灰度图像?_Java_Bufferedimage_Grayscale - Fatal编程技术网

使用setRGB后如何在java中显示灰度图像?

使用setRGB后如何在java中显示灰度图像?,java,bufferedimage,grayscale,Java,Bufferedimage,Grayscale,我正在做一些图像处理程序,遇到了显示灰度图像的问题。我所做的是,我使用getRGB提取像素值,然后尝试更改这些像素值。但是在改变了这些像素值之后,我仍然得到了以前缓冲过的相同的图像。我的代码部分如下所示:- int [] rgbArray=new int[width*height]; BufferedImage buffer = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); buffer = ImageIO

我正在做一些图像处理程序,遇到了显示灰度图像的问题。我所做的是,我使用getRGB提取像素值,然后尝试更改这些像素值。但是在改变了这些像素值之后,我仍然得到了以前缓冲过的相同的图像。我的代码部分如下所示:-

  int [] rgbArray=new int[width*height];
  BufferedImage buffer = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  buffer = ImageIO.read(new File(file));


  //Before changing the pixel values
  buffer.getRGB(0, 0, width, height, rgbArray , 0,width );
  int a = (0xff000000 & rgbArray[0]) >>> 24;
  int r = (0x00ff0000 & rgbArray[0]) >> 16;
  int g = (0x0000ff00 & rgbArray[0]) >> 8;
  int b = (0x000000ff & rgbArray[0]);
  System.out.println("a " + a + " r " + r + " g " + g + " b " + b);
  System.out.println("rgbArray["+0+"] = "+ rgbArray[0]);
  for(int i = 0 ; i<width*height; i++)
   {
     rgbArray[0]=0x808080;  //Changing pixel values to grey
   }
  buffer.setRGB(0, 0, width, height, rgbArray , 0,width);


  //After changing the pixel values
  buffer.getRGB(0, 0, width, height, rgbArray , 0,width );
  a = (0xff000000 & rgbArray[0]) >>> 24;
  r = (0x00ff0000 & rgbArray[0]) >> 16;
  g = (0x0000ff00 & rgbArray[0]) >> 8;
  b = (0x000000ff & rgbArray[0]);
  System.out.println("a " + a + " r " + r + " g " + g + " b " + b);
  System.out.println("rgbArray["+0+"] = "+ rgbArray[0]);
int[]rgbArray=newint[width*height];
BuffereImage buffer=新的BuffereImage(宽度、高度、BuffereImage.TYPE_INT_RGB);
buffer=ImageIO.read(新文件(File));
//在更改像素值之前
getRGB(0,0,宽度,高度,rgbArray,0,宽度);
int a=(0xff000000&rgbArray[0])>>>24;
int r=(0x00ff0000&rgbArray[0])>>16;
int g=(0x0000ff00&rgbArray[0])>>8;
int b=(0x000000ff&rgbArray[0]);
系统输出打印项次(“a”+a+“r”+r+“g”+g+“b”+b);
System.out.println(“rgbArray[“+0+”]=“+rgbArray[0]);
对于(int i=0;i>>24;
r=(0x00ff0000&rgbArray[0])>>16;
g=(0x0000ff00&rgbArray[0])>>8;
b=(0x000000ff&rgbArray[0]);
系统输出打印项次(“a”+a+“r”+r+“g”+g+“b”+b);
System.out.println(“rgbArray[“+0+”]=“+rgbArray[0]);
像素值的输出对于原始像素和新像素都是正确的,但我无法查看新图像,它显示的是旧图像,即原始图像显示的不是更改后的图像

rgbArray[0]=0x808080;  //Changing pixel values to grey
在这里,您只是将第一个像素更改为灰色。您可能想做的是:

rgbArray[i]=0x808080;  //Changing pixel values to grey
这会使每个像素变为灰色

//编辑:

当然,每个像素都是完全相同的(灰色),这可以用更少的代码实现,例如:

    Graphics2D g2 = buff.createGraphics();
    g2.setColor(Color.grey);
    g2.fillRect(0, 0, buff.getWidth(), buff.getHeight());
    g2.dispose();
如果您想要黑白图片而不是彩色图片,请尝试:

    BufferedImageOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
    buffer =  op.filter(buffer, null);

为了更快地获得更好的帮助,请发布一个。您正在第2行分配一个大的
buffereImage
,但随后将其丢弃并替换为调用
ImageIO.read()
。为了内存起见,可能不想这样做。是的,thax…但是我如何将更改后的像素显示为图像?是的,很抱歉,这是rgbArray[i]=0x808080;在原始代码中,我复制了错误的。我得到了正确的像素值,但没有显示正确的图像…@Arizvi这很奇怪。如果我用i替换0,加载一个图像,在其上运行代码,然后保存它,它会被更改(每个像素都设置为灰色)。这就是人们所期望的(所有分配了新值的像素,因此结果应该与原始图像不同…)是的,每个像素都变为灰色,但为什么它没有显示在图像上?我仍然得到旧的彩色图像,但面板上没有新的灰色图像。。。