グレースケール画像を入力として受け入れる単純なプログラムを作成しています。単純にやりたいことは、各ピクセルの色情報を取得し、PixelClass と呼ぶオブジェクトの配列に格納することです。最終的な目標は、取得した色情報を使用して、画像を新しい BufferedImage に再描画することです。
指定された画像からピクセル配列を作成するために使用されるコード。
public static PixelClass[][] getPixelArray(BufferedImage bi){
int height = bi.getHeight();
int width = bi.getWidth();
PixelClass[][] pixelArray = new PixelClass[height][width];
for(int i = 0 ; i < height ; i++){
for(int j = 0 ; j < width ; j++){
pixelArray [i] [j] = new PixelClass(bi.getRGB(j, i));
}
}
return pixelArray;
}
PixelClass オブジェクトの配列を使用して、上記の画像を再描画しようとするために使用されるコード
public void paintToPanel(PixelClass [][] pc, int height, int width){
BufferedImage nbi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
for ( int i = 0 ; i < height ; i++){
for ( int j = 0 ; j < width ; j++){
nbi.setRGB(j, i, pc[i][j].getRGBValue());
}
}
JLabel containerLabel = new JLabel(new ImageIcon(nbi));
containerLabel.setBounds(10,10,nbi.getHeight(), nbi.getWidth());
this.add(containerLabel);
}
元の画像へのリンク
ご覧のとおり、画質が大幅に低下しています。結果の画像は色あせて見えます。