イメージをピクセルの配列に変換しました。 3つの別々の配列にRGB値を保存しました。イメージをピクセルの配列に変換し、ピクセルを使用してイメージを再作成します。サイズは縮小されます。どうして?
次に、同じ値(操作なし)を使用してイメージを作成しようとしました。元の画像は205kBで、新しい画像はB & W画像の場合は121kB、カラー画像の場合は215kB〜96kBです。また、明るさに若干の変化があります(明るさが増し、全体のコントラストも上がります)。これを引き起こしているのは何ですか?
私は色付きとB & W画像を試しました。結果は同じでした。
また、以前の出力イメージ(96kB)で同じコードを実行しましたが、新しい出力はまだ96kBでした。
Codes-
1)画像を読み取る:
int width = img.getWidth(null);
int height = img.getHeight(null);
pixelR = new int[width * height];
pixelG = new int[width * height];
pixelB = new int[width * height];
int index=0;
int r, g, b, gray, rgb;
for(int i=0; i<width; i++) {
for (int j=0; j<height; j++) {
rgb = img.getRGB(i, j);
r = (rgb >> 16) & 0xFF;
g = (rgb >> 8) & 0xFF;
b = (rgb & 0xFF);
pixelR[index]=r;
pixelG[index]=g;
pixelB[index]=b;
index++;
}
}
2)イメージを書く
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
int index=0;
int val;
int r, g, b;
for (int i=0; i<width; i++) {
for (int j=0; j<height; j++) {
r=pixelR[index];
g=pixelG[index];
b=pixelB[index++];
Color newColor = new Color((int)r, (int)g, (int)b);
image.setRGB(i, j, newColor.getRGB());
}
}
File f = null;
try{
f = new File("<filepath>.jpg");
ImageIO.write(image, "jpg", f);
}catch(IOException e){
System.out.println("Error: "+e);
}
}
おそらく、元の画像よりも低品質で書いていますか? –
'pixelR [index] = r; pixelG [index] = r; pixelB [index] = r; 'あなたは同じ値を何度も何度も割り当てています。それはタイプミスですか? – TDG
@TDGはい、タイプミス。修正されました。 –