Hallo Leute,
ich arbeite gerade an einer Applikation, die eine Datenbank verwenden soll. Auf derselbigen möchte ich kleinere Bilder als BLOBs speichern, entsprechend muss ich in Java die Bilder in zwei Richtungen konvertieren:
1) Von Buffered Image nach Byte array. Das mache ich so:
2) Vom Byte-Array zurück zum Buffered Image. Das ist mein Code:
Das Problem ist: wenn ich ein BufferedImage in ein Byte-Array umwandle und das Byte-Array dann mit obiger Methode zurück in ein BufferedImage transformieren möchte, liefert mir die Methode immer null zurück (wohlgemerkt: die IOException fliegt nicht, die angegebene Fehlermeldung erscheint nicht auf der Konsole).
Was ich sagen kann ist, dass die Konvertierung vom BufferedImage zum Byte-Array vermutlich funktioniert (ich hab mir das Byte-Array mal ausgeben lassen, die Hex-Werte stimmen mit den Farbwerten der Pixel überein).
Ich hab mal in die API geschaut, da steht bei "ImageIO.read(InputStream)", dass null zurückgegeben wird, falls kein ImageReader das Format des Bildes kennt. Kann es sein dass es daran liegt? Ich versuche eine ganz herkömmliche, unkomprimierte .bmp-Datei zu konvertieren. Mit .jpg hab ich das selbe Ergebnis: es kommt beim rückkonvertieren immer null zurück...
Kann es sein dass die beiden Methoden einfach nicht zueinander kompatibel sind? Gibt's einfachere Lösungen? Oder war ich schlicht zu dumm...? Ich sitze hier seit Stunden und weiß wirklich nicht mehr weiter :bahnhof:
Gruß,
Alan
ich arbeite gerade an einer Applikation, die eine Datenbank verwenden soll. Auf derselbigen möchte ich kleinere Bilder als BLOBs speichern, entsprechend muss ich in Java die Bilder in zwei Richtungen konvertieren:
1) Von Buffered Image nach Byte array. Das mache ich so:
Java:
private byte[] getImageByteData(final BufferedImage image) {
WritableRaster raster = image.getRaster();
DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
return buffer.getData();
}
2) Vom Byte-Array zurück zum Buffered Image. Das ist mein Code:
Java:
public BufferedImage getImage(byte[] bytes) {
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
try {
BufferedImage image = ImageIO.read(byteArrayInputStream);
byteArrayInputStream.close();
return image;
} catch (IOException e) {
System.err.println("Bild konnte nicht geladen werden!");
return null;
}
}
Das Problem ist: wenn ich ein BufferedImage in ein Byte-Array umwandle und das Byte-Array dann mit obiger Methode zurück in ein BufferedImage transformieren möchte, liefert mir die Methode immer null zurück (wohlgemerkt: die IOException fliegt nicht, die angegebene Fehlermeldung erscheint nicht auf der Konsole).
Was ich sagen kann ist, dass die Konvertierung vom BufferedImage zum Byte-Array vermutlich funktioniert (ich hab mir das Byte-Array mal ausgeben lassen, die Hex-Werte stimmen mit den Farbwerten der Pixel überein).
Ich hab mal in die API geschaut, da steht bei "ImageIO.read(InputStream)", dass null zurückgegeben wird, falls kein ImageReader das Format des Bildes kennt. Kann es sein dass es daran liegt? Ich versuche eine ganz herkömmliche, unkomprimierte .bmp-Datei zu konvertieren. Mit .jpg hab ich das selbe Ergebnis: es kommt beim rückkonvertieren immer null zurück...
Kann es sein dass die beiden Methoden einfach nicht zueinander kompatibel sind? Gibt's einfachere Lösungen? Oder war ich schlicht zu dumm...? Ich sitze hier seit Stunden und weiß wirklich nicht mehr weiter :bahnhof:
Gruß,
Alan