Webstart Laden von Tiff-Bildern als BufferedImage und TFW aus einem JAR

evilion

Mitglied
Hallo Leute

Ich hab folgendes Problem

Code:
java.lang.IllegalArgumentException: Width (2147483647) and height (-2147483648) cannot be <= 0
	at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
	at java.awt.image.BufferedImage.<init>(Unknown Source)
	at map.Land.cropImage(Land.java:635)
	at map.Land.<init>(Land.java:286)
	at map.Map.createSceneGraph(Map.java:174)
	at map.Map.init(Map.java:142)
	at map.Map.main(Map.java:89)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.sun.javaws.Launcher.executeApplication(Unknown Source)
	at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
	at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
	at com.sun.javaws.Launcher.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Mit anderen Worten, wie ich es glaube, kann er zwar das Bild laden aber nicht weiter verwenden. Oder er hat beim Laden Probleme.

Zum laden des Bildes verwende ich:
Java:
      //Lade das Bild von dem Kartenausschnitt
      BufferedImage bufferedImage = null;
      try {
         //Lokal
         //File file = new File("125.tif");
         //URL url = this.getClass().getResource("/images/ortho2004_10.tif");
         //File file = new File("ortho2004_10.tif");
         //File file = new File(ClassLoader.getSystemResource("/image/ortho2004_10.tif"));

         //Java WebStart
         //File file = new File("pics\\land\\125.tif");
         //File file = new File("pics\\land\\ortho2004_10.tif");
         //bufferedImage = ImageIO.read(file);
         bufferedImage = ImageIO.read(getClass().getResourceAsStream(
               "/images/ortho2004_10.tif"));
         System.out.println("Hab das TIF geladen, Boss");
      }
      catch (Exception e) {
         System.out.println("Sorry boss I cant get any image loaded.");
      }

Wenn ich das Bild geladen hab, will ich es zuschneiden, das mache ich mit diesem Befehl
Java:
//Erstell ein ImageComponent2D aus dem geschnittenem Bild
      ImageComponent2D textImage = new ImageComponent2D(
            ImageComponent2D.FORMAT_RGB,
            cropImage(bufferedImage,
                      x, y, width, height));

Der Fehler taucht hier auf

Java:
public static BufferedImage cropImage(BufferedImage original, int left,
                                         int top, int width, int height) {
      //Das ausgeschnittene Bild
      BufferedImage resizedImage = new BufferedImage(width, height, getType(
            original.getColorModel())); //***<-FEHLER bei original.getColorModel()***
      //Instanziere graphics2D Objekt um ins resizedImage hineinzuzeichnen
      Graphics2D graphics2D = resizedImage.createGraphics();
      //Setze Eigenschaften für das Rendering
      graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                  RenderingHints.VALUE_ANTIALIAS_ON);

      //Wenn die Breite grösser als die Originalbreite ist, wird die Textur Bicubic
      if (width > original.getWidth()) {
         graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                                     RenderingHints.VALUE_INTERPOLATION_BICUBIC);
      }
      //Sonst Bilinear
      else {
         graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                                     RenderingHints.VALUE_INTERPOLATION_BILINEAR);
      }
      graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING,
                                  RenderingHints.VALUE_RENDER_DEFAULT);
      //Zeichne das Bild aus dem Original mit der vorgegebenen Breite und Höhe
      graphics2D.drawImage(original, 0, 0, width, height, left, top,
                           width + left, height + top, null);


      System.out.println("Bild wurde geschnitten");
      /*
      File asdf = new File("C:\\temp\\asdf");
      try {
      ImageIO.write(resizedImage, "JPG", asdf);
      }
      catch (IOException ex) {
      Logger.getLogger(Land.class.getName()).log(Level.SEVERE, null, ex);
      }*/
      return resizedImage;
   }// end of cropImage()

Das passiert mir aber nur bei Webstart.
Bei Netbeans läuft alles wunderbar.
Bei cmd (java -jar map3D.jar) stürzt das Program nach dem Ausführen ab. Ohne Fehlermeldung und einer erfolgreichen Meldung "ok".

Ach und bevor ich es vergesse...
Ich lade ein Tiff Bild. Um das zu ermöglichen benutze ich JAI_imageio Bibliothek. Diese ist im .jnlp eingebunden und sollte geladen werden.
Mein .jnlp sieht dabei so aus:

[XML]<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="file:/C:/NetBeansProjects/Map_3D/dist/" href="launch.jnlp" spec="1.0+">
<information>
<title>Mapdarstellung ALPHA</title>
<vendor>Evilion</vendor>
<homepage href=""/>
<description>Map</description>
<description kind="short">Mapdarstellung ALPHA</description>


<offline-allowed/>
</information>

<security>
<all-permissions/>
</security>

<resources>
<j2se java-vm-args="-Djava.security.policy=applet.policy" initial-heap-size="250M" max-heap-size="500M" version="1.5+"/>
<property name="Xms" value="250M"/>
<property name="Xmx" value="500M"/>
<property name="j3d.rend" value="d3d"/>
<jar eager="true" href="Map_3D.jar" main="true"/>


<jar href="lib/postgresql-8.4-701.jdbc4.jar"/>
<jar href="lib/j3dcore-d3d_dll.jar"/>
<jar href="lib/j3dcore-ogl-chk_dll.jar"/>
<jar href="lib/j3dcore-ogl_dll.jar"/>
<jar href="lib/j3dcore.jar"/>
<jar href="lib/j3dutils.jar"/>
<jar href="lib/vecmath.jar"/>
<jar href="lib/clib_jiio.dll.jar"/>
<jar href="lib/clib_jiio_sse2.dll.jar"/>
<jar href="lib/clib_jiio_util.dll.jar"/>
<jar href="lib/clibwrapper_jiio.jar"/>
<jar href="lib/jai_imageio.jar"/>
</resources>
<application-desc main-class="map.Map">

</application-desc>
</jnlp>
[/XML]

Kann mir jamand helfen?
 
Zuletzt bearbeitet:

hansmueller

Bekanntes Mitglied
Hallo,

es liegt lt. Fehlermeldung nicht am original.getColorModel(), sondern an dem width und dem height.
2147483647 und -2147483648 sind nämlich die maximalsten bzw. minimalsten Werte, die ein Integer annehmen kann.

Wird das Bild auch wirklich geladen (mach mal eine Prüfung mit bufferedImage == null).

Überprüfe die Werte (bufferedImage, x, y, width und height), bevor du sie an die Methode cropImage() übergibst. Es könnte sein, das da irgendwo der Fehler liegt.

MfG
hansmueller
 

evilion

Mitglied
x: 2147483647 y: 2147483647 width: 2147483647 height: -2147483648

...
*kopf -> tisch*
verdammt... das mir das nicht frueher aufgefallen ist...

dann...

Ich lese ein .tfw File ein, der 6 Werte enthält. Diese dienen um das dazugehörige Bild zu georeferenzieren.
Ich lese es so ein:
Java:
int x = 0, y = 0, width = 0, height = 0;

      /* 0: X-Scale - wie viel meter pro pixel
       * 1: Rotation y
       * 2: Roration x
       * 3: Y-Scale - wie viel meter pro pixel (negativ)
       * 4: X-Reference (Top Left Corner Pixel)
       * 5: Y-Reference (Top Left Corner Pixel)
       * */
      double[] tfw = new double[6];

      //Lade den TFW Angaben Datei
      //Und schreibe es in den vorher definierten Array
      try {
         int i = 0;
         // Open the file that is the first
         // command line paramete
         //Lokal
         //FileInputStream fstream = new FileInputStream("125.tfw");

         //FileInputStream fstream = new FileInputStream(ClassLoader.getResourceAsStream("/images/ortho2004_10.tfw"));
         InputStream fstream = java.lang.Object.class.getResourceAsStream("/images/ortho2004_10.tfw");
         //Java WebStart
         //FileInputStream fstream = new FileInputStream("pics\\land\\125.tfw");
         //FileInputStream fstream = new FileInputStream("ortho2004_10.tfw");
         // Get the object of DataInputStream
         DataInputStream in = new DataInputStream(fstream);
         BufferedReader br = new BufferedReader(new InputStreamReader(in));

         /*final BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getClassLoader().getResourceAsStream(
               "/images/ortho2004_10.tfw")));*/



         String strLine;
         //Read File Line By Line
         while ((strLine = br.readLine()) != null) {
            tfw[i] = Double.valueOf(strLine).doubleValue();
            i++;

         //System.out.println(strLine);
         }
         //Close the input stream
         in.close();
         //br.close();
         System.out.println("Hab das TFW geladen, Boss");
      }
      catch (Exception e) {//Catch exception if any
         System.err.println("Error: " + e.getMessage());
      }

Ich hab da sehr viel experementiert und bis jetzt hat es wunderbar im Netbeans geklappt.

Wenn ich die Zeile final BufferedReader br... verwende, dann krieg ich die gleiche Fehlermeldung wie mit Webstart.

Ich bräuchte hier bei immernoch hilfe, wenn jemand eine elegante Lösung hat, wie man im Webstart ein .tfw file einliest, dann bitte postet diese.
Wenn ich vorher ne funktionierende Lösung habe, dann poste ich das hier rein.
 
Zuletzt bearbeitet:

evilion

Mitglied
Funktionierende Lösung:
Um TFW einzulesen benutzte ich
Java:
int x = 0, y = 0, width = 0, height = 0;

      /* 0: X-Scale - wie viel meter pro pixel
       * 1: Rotation y
       * 2: Roration x
       * 3: Y-Scale - wie viel meter pro pixel (negativ)
       * 4: X-Reference (Top Left Corner Pixel)
       * 5: Y-Reference (Top Left Corner Pixel)
       * */
      double[] tfw = new double[6];

      //Lade den TFW Angaben Datei
      //Und schreibe es in den vorher definierten Array
      try {
         int i = 0;
         // Get the object of DataInputStream
         //funktionierende lösung in javawebstart und sonst

         InputStream is = getClass().getResourceAsStream("/images/ortho2004_10.tfw");
         InputStreamReader isr = new InputStreamReader(is);
         BufferedReader br = new BufferedReader(isr);

         String strLine;
         //Read File Line By Line
         while ((strLine = br.readLine()) != null) {
            tfw[i] = Double.valueOf(strLine).doubleValue();
            i++;
         }
         //Close the input stream
         br.close();
         System.out.println("Hab das TFW geladen, Boss");
      }
      catch (Exception e) {//Catch exception if any
         System.err.println("Error: " + e.getMessage());
      }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Webstart Java Webstart hängt sich beim Laden auf! Tools - Maven, Gradle, Ant & mehr 8
T Webstart Resource aus .jar laden Tools - Maven, Gradle, Ant & mehr 5
S .jars in einem Ornder automatisch laden lassen Tools - Maven, Gradle, Ant & mehr 2
H Applet applet neu laden im browser Tools - Maven, Gradle, Ant & mehr 10
K Webstart .class Datei über Reflection laden Tools - Maven, Gradle, Ant & mehr 3
G Webstart Problem mit Adressierung bei Laden von Datei aus jar (Webstart) Tools - Maven, Gradle, Ant & mehr 5
G Textfile in Applet laden möglich? Tools - Maven, Gradle, Ant & mehr 2
U Zertifikat zum Signieren in keytool laden Tools - Maven, Gradle, Ant & mehr 2
T Maven: Abhängigkeit im Jetty laden Tools - Maven, Gradle, Ant & mehr 10
B Hudson - Resourcen laden Tools - Maven, Gradle, Ant & mehr 11
Icewind Applet reagiert nach neu laden der Webseite nicht mehr verlässlich auf KeyEvents Tools - Maven, Gradle, Ant & mehr 6
grudge File in Applet laden Tools - Maven, Gradle, Ant & mehr 4
S Ladebalken beim laden des Applets Tools - Maven, Gradle, Ant & mehr 9
S HttpClient in Applet - html-quellcode laden möglich? Tools - Maven, Gradle, Ant & mehr 3
S Applet schneller laden Tools - Maven, Gradle, Ant & mehr 4
D Fehler beim Applet laden! Tools - Maven, Gradle, Ant & mehr 9
G Bilder von Server Laden Tools - Maven, Gradle, Ant & mehr 4
S applet ueber mehrere ordner hinweg laden Tools - Maven, Gradle, Ant & mehr 2
C Applet + Treiber laden (J/Connector) Tools - Maven, Gradle, Ant & mehr 2
G Java Applet neu laden Tools - Maven, Gradle, Ant & mehr 3
X Problem mit Bilder laden Tools - Maven, Gradle, Ant & mehr 3
D Im Hintergrund laden Tools - Maven, Gradle, Ant & mehr 5
A JNLP Datei aus Application laden Tools - Maven, Gradle, Ant & mehr 4
K .class variabel laden Tools - Maven, Gradle, Ant & mehr 21
M URL im Browser laden? Tools - Maven, Gradle, Ant & mehr 9
saxos1983 Fehlerüberprüfung beim Laden von Bilder Tools - Maven, Gradle, Ant & mehr 3
S Aus Applet per Button-Klick anderes Applet in Browser laden Tools - Maven, Gradle, Ant & mehr 7
H animiertes GIF mit Mediatracker laden Tools - Maven, Gradle, Ant & mehr 2
G Fehler beim Laden des Applets Tools - Maven, Gradle, Ant & mehr 7
S Grafik von Server laden? Tools - Maven, Gradle, Ant & mehr 4
S Access Denied beim Bild laden Tools - Maven, Gradle, Ant & mehr 7
S Dateien laden ? Tools - Maven, Gradle, Ant & mehr 2
K Bilder in Applets laden Tools - Maven, Gradle, Ant & mehr 3
G Bild im Applet laden und ausgeben Tools - Maven, Gradle, Ant & mehr 2
R Mein Applet brauch ewig lange zum laden. Tools - Maven, Gradle, Ant & mehr 5
S Sound/Midi Dateien erst komplett laden Tools - Maven, Gradle, Ant & mehr 12
D Java-Anwendung mit Bildern (JPG) verfügbar machen Tools - Maven, Gradle, Ant & mehr 7
G Mal wieder ein Problem mit Applet und Bildern. Tools - Maven, Gradle, Ant & mehr 3
S allgemeine (Anfänger-)Fragen zu Applet, Threads und Bildern Tools - Maven, Gradle, Ant & mehr 34
A access denied beim anzeigen von Bildern Tools - Maven, Gradle, Ant & mehr 2

Ähnliche Java Themen

Neue Themen


Oben