トップページ > コンテンツ > プログラミング入門 > Java入門 > GUIプログラミング > 画像処理編 > RGBの扱い > ImageデータのRGB変換

PixelGrabberクラスを使用する。以下JavaAPIとCodeZineに掲載されていたプログラム(石立 喬 [著])を参考および引用。
public void handlepixels(Image img, int[] red,int[] green, int[] blue,int x,int y, int w, int h) {
  int size = w * h;
  int pixels[size];
  PixelGrabber pg= new PixelGrabber(img,x,y,w,h,pix,off,scansize);
  try{
    pg.grabPixels();
  } catch(InterruptedException e){
    //interrupted waiting for pixels.エラー表記を記述する等
  }
  //RGBに分解
     for(int i=0;i<size;i++){
        color=new Color(pix[i]);
        red[i]=color.getRed();
        green[i]=color.getGreen();
        blue[i]=color.getBlue();
     }
}
//一次元R,G,Bを二次元化するメソッド
  public void change1DRGBTo2D(int[] oneD, int[][] twoD){
    for(int j=0;j<HEIGHT;j++)
       for(int i=0;i<WIDTH;i++)
         twoD[j][i]=oneD[WIDTH*j+i];
  }

RGBに分解して、戻す方法については別の方法を見つけたので、
RGB分解と元に戻すを参照。

  • PixelGrabber pg = new PixelGrabber(img,x,y,w,h,pix,off,scansize);の解説
    • img:イメージクラスの変数
    • x:イメージから取得するピクセルの左上のx座標
    • y:イメージから取得するピクセルの左上のy座標
    • w:取得するピクセルの幅
    • h:取得するピクセルの高さ
    • pix:取得したデータを格納する配列。int[] pix =new int[SIZE]; (SIZE=w*h)と宣言しておく。
    • off:最初のピクセルをどこに格納するか。普通0で良さそう。
    • scansize:配列上でのピクセル一列の大きさ。通常、wと同じで良さそうな気もするが。

  • 必要な宣言
    • int[] src_red=new int[SIZE];
    • int[] src_green=new int[SIZE];
    • int[] src_blue=new int[SIZE];
    • int[][][] data=new int[3][HEIGHT][WIDTH];
    • int w = WIDTH;(幅の指定。WIDTHの設定は任意)
    • int h = HEIGHT;(高さの指定。HEIGHTの設定は任意)
    • Image img = readImageFile("何か.jpg");

  • 呼び出し元
    • handlepixels(img,src_red,src_green,src_blue,0,0,w,h);
    • change1DRGBTo2D(src_red,data[0]);
    • change1DRGBTo2D(src_green,data[1]);
    • change1DRGBTo2D(src_blue,data[2]);
最終更新:2011年04月02日 13:45