Anzeige:
Ergebnis 1 bis 15 von 16

Thema: Fileimage erzeugen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    27.08.2002
    Beiträge
    337

    Fileimage erzeugen

    Ich versuche aus einem File ein Image zu erzeugen.
    Es klappt auch ganz gut.
    Mein Problem ist, daß bei einer größeren Breite und Höhe des Bildes der Speicherplatz zu klein ist.(OutOfMemoryError: Java heap space)
    Das benötigte Image ist leider 20x so groß, wie die maximal zulässige Breite/Höhe Bildhöhe in Java.
    Ich habe keine Möglichkeit gefunden mehrere Bilder mit verschiedenen Anfangskoordinaten zu erzeugen.

    Hier der Quellcode:

    k++;
    w=15500;h=870;
    benötigt:w=30000; h=9000;
    BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = image.createGraphics();
    drawingPane.paint(g2);
    g2.dispose();
    ImageIO.write(image, "jpg", new File(k+"-example.jpg"));

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    1) Hast du einen Media-Tracker drin? Wenn ja, dann unbedingt die Bilder wieder wegnehmen (sonst gibts Speicherlöcher)

    2) Von Hand bei Programmstart den Heap vergrössern - vgl: http://www.mrunix.de/forums/showthread.php?t=45471

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer
    Registriert seit
    27.08.2002
    Beiträge
    337
    Sorry, so fortgeschritten bin ich noch nicht.
    (...ansonsten kannst du mit dem CL-Parameter -Xmx000M die maximale Größe des von der VM verwendeten Speichers einstellen, wobei 000 natürlich mit einer entsprechenden Zahl substituiert werden muss.)
    Kannst du mir das bitte genau erklären?

    Ein Problem bleibt allerdings. JPG-Bilder können nicht größer wie 15 m sein.
    Deshalb müßte ich das Bild in jedem Fall teilen.

  4. #4
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Zitat Zitat von Jana Beitrag anzeigen
    Sorry, so fortgeschritten bin ich noch nicht.
    (...ansonsten kannst du mit dem CL-Parameter -Xmx000M die maximale Größe des von der VM verwendeten Speichers einstellen, wobei 000 natürlich mit einer entsprechenden Zahl substituiert werden muss.)
    Kannst du mir das bitte genau erklären?
    Jepp:

    zum Ausführen deines Programmes gibst du ja jeweils ein:

    Code:
    java MeinProgramm
    neu jetzt halt:

    Code:
    java -Xms100m -Xmx200m MeinProgramm
    will heissen: Am Anfang 100MB, maximal 200MB Speicher für Java-Heap.

    Ein Problem bleibt allerdings. JPG-Bilder können nicht größer wie 15 m sein.
    Deshalb müßte ich das Bild in jedem Fall teilen.
    Und was ist konkret das Problem? Ich persönlich würde das Bild in mehrere Quadrate aufteilen, bei jedem Zugriff prüfen, welches der Quadrate du brauchst (ev. mehrere) und nachher nur spezifisch diese laden. Wenn du ne gute Performance brauchst, die Bilder halt vorher laden. Oder eine stark komprimierte Version für die Grossansicht und gute Qualität nachladen für Details... Ohne mehr Info kann ich leider nicht weiterhelfen

    MfG Bischi
    Geändert von bischi (25-10-2006 um 18:33 Uhr)

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von bischi Beitrag anzeigen
    Und was ist konkret das Problem? Ich persönlich würde das Bild in mehrere Quadrate aufteilen, bei jedem Zugriff prüfen, welches der Quadrate du brauchst (ev. mehrere) und nachher nur spezifisch diese laden
    Ich denke das war zu einem gewissen Teil in Janas erstem Posting als Frage enthalten:
    kann man auf einer Bilddatei nur einen bestimmten Bereich laden?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Registrierter Benutzer
    Registriert seit
    27.08.2002
    Beiträge
    337
    Die Heap-Size zu erhöhen wäre sehr komfortabel, denn damit habe ich ständig Probleme.
    Ich benutze Eclipse. Im Help Manual habe ich nur gefunden, daß man unter Run -> (x)=Arguments den Heap Size verändern kann.
    Aber es steht nicht da wie.

    Ich möchte von meinem per Java erzeugten File ein jpg-Bild herstellen.
    (So eine Art größeren Screenshot) Das File hat eine Breite von 30m und eine Höhe 0,9m.
    Mit einem JPG-Bild komme ich nicht aus, denn die maximale Breite von JPG-Bildern ist 15m.

    In meinem Code kann ich aber nur Höhe und Breite des Bildes eingeben, aber nicht die Anfangskoordinaten für das zu erstellende Bild.
    Im Internet habe ich nichts gefunden.

    BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = image.createGraphics();
    drawingPane.paint(g2);
    g2.dispose();
    ImageIO.write(image, "jpg", new File(k+"-example.jpg"));



    Das ganze ist eine Zeichnung, die mittlerweile ziemliche Dimensionen angenommen hat.
    Aber ich zweifle langsam, ob Java die richtige Programmiersprache ist.
    Geändert von Jana (25-10-2006 um 21:17 Uhr)

  7. #7
    Registrierter Benutzer
    Registriert seit
    07.08.2006
    Beiträge
    101
    Mit Java-Bordmitteln? Nicht das ich (spontan) wüsste. Grundsätzlich? Klar Die Frage ist einfach nur, wie viel Zeit man (oder in diesem Fall frau) investieren möchte.
    Eine andere Frage, die sich mir beim Lesen dieses Threads stellt ist: Wofür (zur Hölle *g*) brauchst du ein Bild, dass bei einer Auflösung von 1280 x 1024 über mehr als 23 Bildschirmbreiten und knapp 9 Bildschirmhöhen geht???
    Auch wenn es dir für dein konkretes Problem wahrscheinlich wenig hilft, ich muss dabei an ein Szenario für eine mögliche Implementierung denken, in dem irgendwie viele Rechner eine Rolle spielen

  8. #8
    Registrierter Benutzer
    Registriert seit
    07.08.2006
    Beiträge
    101
    Wenn es um das Aufteilen eines Bildes geht, solltest du dir vielleicht mal die Raster-Technik von Java anschauen. Ich habe da zwar selber noch nicht mit gearbeitet, der Beschreibung nach sollte es aber in die Richtung gehen, wo du hin willst...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •