2011-11-13 53 views
1

我想将彩色图像转换为灰度。首先我获取彩色图像的数据并更改此数据,但是当我想从此数据创建加利图像时,我有这样的错误。 。 enter image description here将彩色图像转换为灰度

的getData()maethod:

public double[] getData(BufferedImage a){ 
     double[] data2=new double[h*w]; 
     int red=0,green=0,blue=0; 

     int counter=0; 
     for(int w1=0;w1<w;w1++){ 
      for(int h1=0;h1<h;h1++){ 
       int rgb=a.getRGB(w1,h1); 
       red=(rgb)>> 16; 
       green=(rgb)>>8; 
       blue=(rgb); 

       data2[counter]=(red+green+blue)/3; 
       counter++; 
      } 
     } 
    return data2; 
} 

创建图像()方法:

void createImage(){ 
double[] data1=getData(colorImage); 

      BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_GRAY); 
       WritableRaster raster = image.getRaster(); 

     int counter = 0 ; 
     for(int i = 0; i<h; i++){ 
      for(int j = 0; j<w; j++){ 
        raster.setSample(i, j, 0, data1[counter]); 
      counter++; 
      } 
     } 
} 
+0

这不是问题,但getData中的计数器不会在任何地方递增。 – Dimme

+0

double [] data2 = new double [h * w]; h和w从哪里来? – Dimme

+0

w和h是加载的图像的宽度和高度。 – Tofiq

回答

2

,因为它看起来对我来说,i和j在setSample调用必须交换。 (或BufferedImage中的w和h)