Der Benutzer kann zu einer Bilddatei navigieren. Ich möchte die ausgewählte Datei in einer Datenbank (derby db) in BLOB-Spalte beibehalten. Um das zu tun, muss ich das Image-Objekt in ein Array von Bytes (Byte []) konvertieren, und um es zu erreichen, muss ich: Byte [] -> Image.Pure JavaFX: Bild in Bytes konvertieren Array (+ gegenläufige Operation). Was ist los mit dir?
So suche ich und fand diese: aus dieser question
reinen Java-fx Lösung Spuren (== Sie werden in fehlenden Punkten füllen müssen :)
Image i = logo.getImage();
PixelReader pr = i.getPixelReader();
PixelFormat f = pr.getPixelFormat();
WriteablePixelFromat wf = f.getIntArgbInstance(); //???
int[] buffer = new int[size as desumed from the format f, should be i.width*i.height*4];
pr.getPixels(int 0, int 0, int i.width, i.height, wf, buffer, 0, 0);
ich auf diese Weise umgesetzt :
private ImageByteInfo imageToByteArray(Image i){
PixelReader pr = i.getPixelReader();
WritablePixelFormat<ByteBuffer> wf = PixelFormat.getByteBgraInstance();
byte[] buffer = new byte[(int) (i.getWidth() * i.getHeight() *4)];
pr.getPixels(0, 0, (int) i.getWidth(), (int) i.getHeight(), wf, buffer, 0, 0);
return new ImageByteInfo(buffer, (int) i.getWidth(), (int) i.getHeight()) ;
}
Außer dass, wenn ich das Pufferarray erforsche. Ich habe festgestellt, dass nur die ersten 4096 Eintrag gültig sind (haben Sie die Nummer), ALLEN Rest des Arrays ist 0 0 0 0 0 0.
Also, wie kann ich das beheben ?? Vielen Dank.
Und das ist die Methode, die das Bild aus dem unfixierten Array retreive. Ist das richtig oder nicht?
private Image byteArrayToImage(ImageByteInfo imageArray){
WritablePixelFormat<ByteBuffer> wf = PixelFormat.getByteBgraInstance();
WritableImage writableimage = new WritableImage(imageArray.getWidth(), imageArray.getHeight());
PixelWriter pixelWriter = writableimage.getPixelWriter();
pixelWriter.setPixels(0, 0, imageArray.getWidth(), imageArray.getHeight(), wf, imageArray.getByteImage(), 0, 0);
return writableimage;
}
Hinweis: Kein Interesse an Dateisystemspeicher, und es brauchen reine JavaFX (kein Schwingen oder AWT)
Ich bin mir nicht sicher, warum Sie das Bedürfnis verspüren, ImageIO zu vermeiden, Sie speichern jedoch unkomprimierte Bytes. Willst du das wirklich? Bilder können sehr viel Platz einnehmen. – VGR
@VGR gut Ich will Die Anwendung, die ich schreibe, um 100% JavaFX, kein AWT, kein Swing, auch wenn es nur eine Dienstprogramm-Codezeile ist (wie in diesem Fall). Und für die Bildkomprimierung. Das brauche ich jetzt nicht. vielleicht werde ich das in einer zukünftigen Version hinzufügen. – usertest