BufferedImage in Applet aus Datei erzeugen
-
Hi ...
ich möchte gerne in einem Applet ein BufferedImage erzeugen. Mein Problem ist nun, dass folgendes nicht funktioniert:
BufferedImage image = ImageIO.read(new URL(url));Da dachte ich mir dann .. ok, da folgendes:
Image image = getImage(new URL(url));
funktioniert, versuche ich das Bild als Image zu laden und dann in ein BufferedImage zu bekommen .... Ich dachte, ich könnte das Image ins Graphics umwandeln und dann drawImage verwenden um das normale Image in ein BufferedImage zu schreiben. Das war mein code:Image g = getImage(new URL(url)); MediaTracker media = new MediaTracker(this); media.addImage(g,0); media.waitForID(0); BufferedImage image = new BufferedImage(g.getWidth(this), g.getHeight(this), BufferedImage.TYPE_INT_RGB); (g.getGraphics()).drawImage(image, 0, 0, g.getWidth(this), g.getHeight(this), null);
Leider hat das nicht funkitioniert .... als Fehlermeldung habe ich erhalten:
java.lang.IllegalAccessError: getGraphics() only valid for images created with createImage(w, h)Wie kann ich in einem Applet ein BufferedImage laden??
Vielen Dank für eure Hilfe
-
Original erstellt von Anfaenger:
**
(g.getGraphics()).drawImage(image, 0, 0, g.getWidth(this), g.getHeight(this), null);[/code]
**Wenn du das so versuchst, dann versuchst du, das leere BufferedImage auf das Bild zu malen, was du geladen hast. Das Resultat wären 2 vollkommen schwarze Bilder.
...also (image.getGra...Warum funktioniert die erste Variante nicht?
-
Ich glaube, dass ich gestern die Fehlermeldung falsch interpretiert habe.
BufferedImage image; try { Image g = getImage(new URL("http://localhost/map_Germany1.jpg")); image = ImageIO.read(new File("http://localhost/map_Germany1.jpg")); image = ImageIO.read(new URL("http://localhost/map_Germany1.jpg")); image = ImageIO.read(new URL(getCodeBase(), "map_Germany1.jpg")); } catch (MalformedURLException e) {} catch (IOException e) {}
Die getImage Methode funktioniert. Alle anderen funktionieren allerdings nicht.
Kann mir einer sagen, was ich hierbei falsch gemacht habe?
Ich erhalte folgende Fehlermeldung:
java.security.AccessControlException: access denied (java.io.FilePermission C:\eclipse\workspace\StreetMap\map_Germany1.jpg read)
Was ich nicht verstehe, ist, warum kann die getImage darauf zugreifen, während alle anderen read methoden dieses nicht können?
Vielen Dank für eure Hilfe
-
ja, also so:
Image image; public void init() { // Load image image = getImage(getDocumentBase(), "http://hostname/image.gif"); } public void paint(Graphics g) { // Draw image g.drawImage(image, 0, 0, this); }
hätt ichs auch gemacht. also sone exception bekommst du, wenn dein applet versucht, ins system zu schreiben. hast du vielleicht versucht, dein bild zu schreiben, statt zu lesen?
gruß devil
-
Der code funktioniert bei mir auch ... aber halt nicht in einem Applet.
Naja .... ich hab mich jetzt entschieden, das ganze erstmal als normale Anwendung zu schreiben, und das ganze vielleicht hinterher noch in ein applet umzuwandeln.
MfG
-
Das Problem ist meiner Meinung nach, dass dein Applet nicht die Berechtigung hat Dateien zu öffnen, wohl aber URLs. Deshalb funktioniert der Aufruf
getImage(new URL(...));
der Aufruf
ImageIO.read(new File(...));
allerdings nicht.
Das hängt damit zusammen, dass Applets in einem sogenannten Sandkasten (Sandbox) laufen. Die Rechte für Applets sind soweit eingeschränkt, um Zugriffe von aussen zu verhindern. Sonst könnte man leicht ein Applet schreiben, welches dann Dateien löscht, kopiert oder sonst wie manipuliert.
Um das zu ändern musst du das Applet in ein Jar verpacken und dieses dann mit den entsprechenden Rechten signieren. Wie das geht steht in der Doku zu den Tools die mit dem SDK geliefert werden.
Es kann sein, dass man das auch auf anderem Wege erreicht - da musste mal bei Sun suchen.Viel Spass