Tôi đã chuyển đổi hình ảnh thành một mảng pixel. Tôi đã lưu các giá trị RGB trong ba mảng riêng biệt.Chuyển đổi hình ảnh thành mảng pixel, tạo lại hình ảnh bằng pixel - kích thước bị giảm. Tại sao?
Sau đó, tôi đã thử tạo hình ảnh bằng các giá trị giống nhau (không có thao tác). Ảnh gốc có kích thước 205kB và hình ảnh mới là 121kB trong trường hợp ảnh B & W và từ 215kB đến 96kB trong trường hợp có hình ảnh màu. Ngoài ra, có sự thay đổi nhỏ về độ sáng (độ sáng được tăng lên và độ tương phản tổng thể). Điều gì gây ra điều này?
Tôi đã thử cả hai ảnh có màu và B & W. Kết quả giống nhau.
Ngoài ra, tôi chạy cùng mã trên hình ảnh đầu ra trước đó (96kB), đầu ra mới vẫn là 96kB.
Codes-
1) Để đọc hình ảnh:
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) Viết image:
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);
}
}
Có lẽ bạn đang viết với chất lượng thấp hơn hình ảnh gốc? –
'pixelR [index] = r; pixelG [index] = r; pixelB [index] = r; 'bạn đang gán cùng một giá trị lặp lại. Nó là một lỗi đánh máy? – TDG
@TDG có, lỗi đánh máy. Đã sửa. –