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