Ich konvertierte ein Bild in ein Array von Pixeln. Ich habe RGB-Werte in drei separaten Arrays gespeichert.Konvertieren Sie ein Bild in eine Pixelmatrix, erstellen Sie ein Bild mit Pixel - die Größe wird reduziert. Warum?
Dann habe ich versucht, das Bild mit den gleichen Werten (keine Manipulation) zu erstellen. Das Originalbild hatte eine Größe von 205kB und das neue Bild hatte 121kB im Falle eines Bildes B & W und von 215kB bis 96kB im Falle eines Farbbildes. Außerdem ändert sich die Helligkeit geringfügig (die Helligkeit wird erhöht und der Kontrast insgesamt). Was verursacht das?
Ich habe sowohl mit farbigen und B & W Bilder probiert. Das Ergebnis war das gleiche.
Auch lief ich den gleichen Code auf dem vorherigen Ausgabebild (96kB), die neue Ausgabe war immer noch 96kB.
Codes-
1) Bild lesen:
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) Schreiben 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);
}
}
Vielleicht schreiben Sie mit einer niedrigeren Qualität als das Originalbild? –
'PixelR [Index] = r; pixelG [index] = r; pixelB [index] = r; 'Sie weisen immer wieder denselben Wert zu. Ist es ein Tippfehler? – TDG
@TDG ja, Tippfehler. Korrigiert. –