Bild in ein byte[] bekommen, dann an db4o speichern

DanielR

Grünschnabel
Hallo ihr,

ich bin ein absoluter Neuling was byte Arrays und insgesamt Bilderte mit Java verarbeiten angeht.
Um ein Bild in ein byte Array zu bekommen hab ich hier schon folgendes gefunden:

Code:
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
import javax.imageio.ImageIO;
 
/**
 * @author Thomas.Darimont
 */
public class ImageToByteArrayExample {
 
  /**
   * @param args
   */
  public static void main(String[] args) throws Exception {
    File file = new File("c:/Winter.jpg");
    loadFileFromPersistentStore(file);
 
    BufferedImage bufferedImage = ImageIO.read(file);
    loadImageFromMemory(bufferedImage);
  }
 
  /**
   * @param file
   * @throws IOException
   */
  private static void loadImageFromMemory(BufferedImage image) throws IOException {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    ImageIO.write(image, "jpeg", byteArrayOutputStream);
    byte[] imageData = byteArrayOutputStream.toByteArray();
    System.out.println(imageData.length);
  }
 
 
  /**
   * @throws Exception
   * @throws FileNotFoundException
   */
  private static void loadFileFromPersistentStore(File file) throws Exception, FileNotFoundException {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    copyStream(new FileInputStream(file), byteArrayOutputStream);
    byte[] data = byteArrayOutputStream.toByteArray();
    System.out.println(data.length);
  }
 
 
  private static void copyStream(InputStream src, OutputStream dest) throws Exception {
    byte[] buffer = new byte[16384];
    int len;
    while ((len = src.read(buffer)) > 0) {
      dest.write(buffer, 0, len);
    }
    src.close();
    dest.close();
  }
}

Leider verstehe ich den Quelltext fast überhaupt gar nicht. Wird da am Anfang das file aus dem Ordner auf der
Festplatte geladen und dann irgendwas damit gemacht und was sollen die ganzen Methoden und warum
wird byte[] imageData und einmal byte[]data und dann auch noch byte[]buffer aufgerufen? Was sollen die zwei Ausgaben?
Und ist mit der Zeile hier :

byte[] buffer = new byte[16384];

Das Array jetzt auf eine bestimmte größe beschränkt? Wie groß kann man es maximal machen? Denn ich will das Array
bzw. die Bilder die sich darin befinden , an eine db4o Datenbank schreiben (ich glaub da muss ich das komplette Array einfach
mit db.set(arrayName); an die Datenbank schreiben. Jetzt hab ich gelesen, dass die maximal byte Array größe die db4o
verarbeitet 256 GB ist, kann ich dann einfach ein byte Array mit dieser Größe deklarieren und jedes Bild, das ich jemals an der
Datenbank speichern will, in diesem Array speichern?


Sobald ich dann jetzt mal versteh wie ich ein Bild in ein Byte Array bekomme (bitte erklärt mir am Besten den Quelltext fast Zeile für Zeile für einen absoluten Anfänger),
möchte ich dann noch wissen, wie ich das Array in eine db4o Datenbank bekomme (ich glaub dieser Teil ist noch einfach, den schaffe ich auch noch), aber noch viel
wichtiger, wie ich das gewünschte Bild wieder rausbekomme und mir dann auch anzeigen lassen kann, also dass ich sehe dass ich überhaupt was von meiner
Datenbank zurück bekommen habe.

Ich habe da auch schon was hier im Forum gefunden. Sobald ich das Objekt aus dem Byte Array zurück gegeben habe, dann kann mir ja sicher folgender Quelltext
bei der Ausgabe bzw. beim Zeichnen des Bildes helfen (natürlich muss ich dann die Variablen anpassen):

Code:
BufferedImage bim1 = ImageIO.read(new ByteArrayInputStream(bytes));
			
int w = bim1.getWidth(),
     h = bim1.getHeight();
			
BufferedImage bim2 = new BufferedImage( w, h, BufferedImage.TYPE_INT_ARGB );
Graphics2D g2 = (Graphics2D) bim2.createGraphics();
			
g2.drawImage(bim1, 0, 0, this);

Angenommen das Bild aus der Datenbank würde ich als bim1 zurück geben, wäre dass
dann der komplette Quelltext um es anzeigen zu lassen?
Außerdem wäre es auch nett, wenn jemand auch diesen Quelltext Anfänger gerecht dokumentieren könnte.

So jetzt hoffe ich, dass sich jemand findet der sich mit den Bildern und hoffentlich sogar mit der db4o Datenbank auskennt.
Es wäre mir auf jeden Fall schon mal sehr geholfen wenn jemand ganz ausführlich die Quelltext erklären könnte und dabei
auch noch sagen könnte, ob meine Grundidee stimmen würde.

Vielen vielen lieben Dank schon mal im voraus.

Beste Grüße

Daniel
 
Zurück