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; 
} 

はcreateImage()メソッド:

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 =新しいdouble [h * w]; hとwはどこから来ていますか? – Dimme

+0

wとhは読み込まれた画像の幅と高さです。 – Tofiq

答えて

2

それは私のために見えるよう、中にiとj setSample呼び出しをスワップする必要があります。 (またはBufferedImageのwとh)

関連する問題