Bild direkt aus Datenbank anzeigen lassen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hallo,

ich habe in einer datenbanktabelle eine spalte vom typ byte in der ich png bilder abspeichere. jetzt will ich diese bilder aus der tabelle holen und mit swing in einem jframe anzeigen lassen. gibt es eine möglichkeit, aus dem bytestrom direkt ein bild zu erzeugen und anzeigen zu lassen oder muss ich das bild auf jeden fall erst lokal speichern? die methode getImage zum holen eines bildes erwartet ja eine url... brauche ich dazu vielleicht dieses advanced imaging api?

danke im voraus!
 
G

Guest

Gast
hallo,

ich hab jetzt mal folgendes probiert, da ich noch keinen zugriff auf die datenbank habe:

Code:
MediaTracker tracker = new MediaTracker(this);
				
		try{	
			
			FileInputStream fr = new FileInputStream(filename);
			BufferedInputStream br = new BufferedInputStream (fr);
			
			Image img = ImageIO.read(br);
					System.out.println("DEBUG: Nach Erzeugen des Images");
					tracker.addImage(img, 1);
					try {
						tracker.waitForID(1);
					}
					catch (InterruptedException ex){} 
						g.drawImage(img,0,0,this);
		
		}catch (Exception ex) {}

das bild wird angezeigt, allerdings dauert es sehr lange...
gibt es da eine möglichkeit irgendwie zu puffern? wenn ich das später nicht lokal sondern aus der db hole, wird es sicher nicht schneller...
 
B

Beni

Gast
Ja... du könntest das Image (die Instanz von Image, die du da einliest) z.B. in einem Array speichern... (und da du bereits mit Datenbanken arbeitest, d.h. da du scheinbar schon zu den Coddern mit mehr Wissen gehörst: :roll: :bae: :wink: ).
 
G

Guest

Gast
nein, bin eigentlich relativ unerfahren...
wie meinst du das mit dem array genau? soll ich das ganze vorladen? aber wann? das bild soll angzeigt werden wenn das jframe aufgeht. kannst du vielleicht mal ein codebeispiel geben?

und dann hab ich noch ein anliegen *nerv* :wink: :

ich will das bild in einer jscrollpane anzeigen, falls es mal größer als das fenster ist. sollte ja eigentlich nciht so schwer sein.

Code:
//im konstruktor:
this.setContentPane(getJContentPane());

//in der methode getJContentPane, hier ohne jscrollpane, bild wird angezeigt:
private Container getJContentPane() {
			if (this.c == null) { //c ist vom Typ Container	
				c = this.getContentPane();
				this.b = new Bild();
				c.add(this.b);	
			}
			return c;
} 

//und mit scrollpane dachte ich geht das ganze so, leider wird dann kein bild mehr angezeigt:
private Container getJContentPane() {
			if (this.c == null) {	
				c = this.getContentPane();
				this.jscrollpane = new JScrollPane();
				c.add(this.jscrollpane);
				this.b = new Bild();
			                c.add(this.jscrollpane);	
			}
			return c;
	}
 
B

Beni

Gast
Du zeigst immer nur ein Bild an? Dann lad das Bild einfach in dem Augenblick, wo das Fenster aufgeht. (du könntest die geladenen Bilder in einem Array cachen, aber egal).


Zum 2. Problem:
Code:
         if (this.c == null) {   
            c = this.getContentPane();
            this.b = new Bild();
            this.jscrollpane = new JScrollPane( this.b );  // man muss dem JScrollPane auch was zum anzeigen geben.
            c.add(this.jscrollpane);

            c.add(this.jscrollpane);   
         }
         return c;
   }
Und Bild sollte bei der Methode "getPreferredSize" die Grösse des angezeigten Bildes zurückgeben.
 
G

Guest

Gast
also das mit dem laden hab ich jetzt hinbekommen. hab einfach den kompletten code teil in dem das bild erstellt wird aus der paint methode rausgenommen. somit wird der vorgang nur einmal bei aufbau des fensters gemacht.
das dauert jetzt zwar länger, dafür ist das bild z.b. nach minimieren und anschließendem maximieren des fensters viel schneller wieder geladen.

aber die geschichte mit mit der jscrollpane funktioniert immer noch nicht. hab copy and paste von deinem code gemacht, es wird weiterhin nur nur das bild ohne scrollbar angezeigt. das bild ist 800*600, das fenster 640*480

???
 
B

Beni

Gast
Und Bild sollte bei der Methode "getPreferredSize" die Grösse des angezeigten Bildes zurückgeben.

Und ein Aufruf von "validate" kann auch nie schaden :wink:

Mehr fällt mir gerade auch nicht ein.
 
G

Guest

Gast
hmm, die methode getPreferredSize von Bild (Container) gibt natürlich die Grösse wieder...
aber was bringt mir das? wo soll ich die aufrufen?
validate hab ich schon probiert, bringt aber auch nichts :cry:
 
B

Beni

Gast
Du musst sie nicht selbst aufrufen, das JScrollPane wird sie aufrufen, um die Groesse des Panels zu setzen.
(Obwohl ich jetzt ein bisschen unsicher werde)
 
G

Guest

Gast
hat nicht irgendjemand eine idee wo der fehler liegen könnte?
 
G

Guest

Gast
hallo,
das mit dem Bild anzeigen funktioniert ja jetzt.
Code:
try {	
			
				//FileInputStream fr = new FileInputStream(filename);
				//BufferedInputStream br = new BufferedInputStream (fr)
				// img = ImageIO.read(br);
				img = ImageIO.read(png_data);
		
						//System.out.println ("DEBUG: Nach Erzeugen des Images");
						tracker.addImage(img1, 1);
						try {
							tracker.waitForID(1);
						}
						catch (InterruptedException ex){} 
							
		
			}catch (Exception ex) {}	
			
			img1 = img.getScaledInstance(552,763,Image.SCALE_SMOOTH);

ich bau mir aus nem InputStream ein Bild zusammen und daraus dann ein neues verkleinertes. Java puffert die Bilder dann aber trotzdem auf meiner PLatte unter so schönen Bezeichnungen wie "ifxb_AWT-EventQueue-0276651302".

Wie kann ich verhindern, dass diese Bilder ständig auf Festplatte gepuffert werden? Gibt es eine Möglichkeit die Bilder nach dem Schließen des Anzeige-Frames wieder aus dem Verzeichnis zu löschen? ich hatte was von img.flush gelesen, aber das bringt anscheinend nichts.
 

Isaac

Bekanntes Mitglied
Anonymous hat gesagt.:
ich bau mir aus nem InputStream ein Bild zusammen und daraus dann ein neues verkleinertes. Java puffert die Bilder dann aber trotzdem auf meiner PLatte unter so schönen Bezeichnungen wie "ifxb_AWT-EventQueue-0276651302".

Wie kann ich verhindern, dass diese Bilder ständig auf Festplatte gepuffert werden? Gibt es eine Möglichkeit die Bilder nach dem Schließen des Anzeige-Frames wieder aus dem Verzeichnis zu löschen? ich hatte was von img.flush gelesen, aber das bringt anscheinend nichts.


DAs ist so als wenn du fragst wie man windows dazu bringt nicht auf die Festplatte zu swappen.

Wenn du nicht willst das was temporäres abgelegt wird musst du eben selber was schreiben. Ich empfehle hierzu ein Buch über Grafikformate (gibts eigentlich in jeder Buchhandlung mit Informatikbereich) und dann selber einen ByteInputStream direkt in eine Matrix speichern wo dann jeder Bildpunkt einem Feld entspricht.

Vieleicht gibts in Java auch was, aber ich hab mich nie drum geschert was Java wohin auslagert. Deshalb weiss ich darauf auch keine Antwort.
 
G

Guest

Gast
das problem ist ja, dass die dateien nicht temporär gespeichert werden. beende ich meine anwendung, bleiben die grafikdateien im klassenverzeichnis der anwendung. mit der zeit gibts dann wohl ein speicherplatz-problem...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Bild direkt im Quelltext erstellen AWT, Swing, JavaFX & SWT 14
P Bild DIREKT in JFrame einfügen AWT, Swing, JavaFX & SWT 8
M JavaFX Mandelbrot-bild noch nicht optimiert AWT, Swing, JavaFX & SWT 7
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
T Bild in ein graphics füllen AWT, Swing, JavaFX & SWT 2
N imageIcon zeigt kein Bild an AWT, Swing, JavaFX & SWT 5
B Bild lädt nicht AWT, Swing, JavaFX & SWT 2
izoards Bild ausdrucken - PageFormat setzen geht nicht AWT, Swing, JavaFX & SWT 5
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
V JavaFX Bild leer und keine Fehlermeldung AWT, Swing, JavaFX & SWT 21
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
D JavaFX Größe des Bild an ImageView anpassen AWT, Swing, JavaFX & SWT 3
M Bewegtes Bild im BorderLayout.CENTER AWT, Swing, JavaFX & SWT 6
C Falschfarbenbild (lineare Grauwertspreizung)aus Grauwert-Bild erstellen AWT, Swing, JavaFX & SWT 15
C Kleineres Bild an bestimmte Koordinaten setzen AWT, Swing, JavaFX & SWT 6
S Bild neu skalieren - Bild in Bild speichern? AWT, Swing, JavaFX & SWT 6
N Bild Drehen AWT, Swing, JavaFX & SWT 1
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
M Combobox bild anklicken AWT, Swing, JavaFX & SWT 2
cool_brivk24 Swing ImageIcon lädt kein Bild AWT, Swing, JavaFX & SWT 12
L Bild nicht in der Mitte AWT, Swing, JavaFX & SWT 16
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
J Swing Bild in Button AWT, Swing, JavaFX & SWT 11
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
T JavaFX Bild in Tabellenzelle AWT, Swing, JavaFX & SWT 2
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
MaxG. Swing Bild Button AWT, Swing, JavaFX & SWT 7
P Swing Bild Skallieren AWT, Swing, JavaFX & SWT 1
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
S Bild mit ImageIcon auf GUI verkleinern AWT, Swing, JavaFX & SWT 3
T AWT Farben in einem Bild ändern AWT, Swing, JavaFX & SWT 8
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
F Gezeichnetes als bild speichern AWT, Swing, JavaFX & SWT 4
B 2D-Grafik Bild farblich filtern AWT, Swing, JavaFX & SWT 2
B JavaFX ImageView neues Bild zuweisen AWT, Swing, JavaFX & SWT 19
A 2D-Grafik Bild wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 24
K Bild in JFrame AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
B Swing Unterteiltes JFrame mit Bild in der Mitte AWT, Swing, JavaFX & SWT 4
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
Z Bildervorschau, MouseDragged das Bild verschieben AWT, Swing, JavaFX & SWT 1
M JavaFX Ein Bild ohne Rahmen fällt runter? AWT, Swing, JavaFX & SWT 2
G Anonyme Instanz von JXImageView erstellen und mit Bild initialisieren AWT, Swing, JavaFX & SWT 7
A JPanel Bild laden (Porblem mit Dateipfad) AWT, Swing, JavaFX & SWT 2
M JavaFX - Bild in Jar einbinden, sodass es auch außerhalb der IDE geladen wird. AWT, Swing, JavaFX & SWT 2
M Bild Beschreibung mit ImageIO speichern AWT, Swing, JavaFX & SWT 1
M "ImageIO.read()" liest Bild nicht richtig ein AWT, Swing, JavaFX & SWT 3
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
K Bild in Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
C GUI öfters durchlaufen und hinterher Bild speichern AWT, Swing, JavaFX & SWT 1
M AWT Farben in Bild ersetzen AWT, Swing, JavaFX & SWT 11
E JavaFX Bild einfügen AWT, Swing, JavaFX & SWT 6
G paintComponents zerstückelt Bild AWT, Swing, JavaFX & SWT 0
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
1 Textfield: jede Buchstabe ein Bild AWT, Swing, JavaFX & SWT 2
C Bild Koordinaten AWT, Swing, JavaFX & SWT 6
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
M Bild in JPanel mit Maus einfügen AWT, Swing, JavaFX & SWT 0
B JPanel und png-Bild AWT, Swing, JavaFX & SWT 2
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
O 2D-Grafik Bild abgeschnitten nach Rotation mit Affine Transform und Hintergrund Schwarz AWT, Swing, JavaFX & SWT 8
A Swing Malprogramm Bild speichern? AWT, Swing, JavaFX & SWT 9
U Bild innerhalb hatml code anzeigen AWT, Swing, JavaFX & SWT 5
Y JavaFX Bild speichern und Pfad dazu abspeichern AWT, Swing, JavaFX & SWT 2
S Geladenes Bild wird nicht in JPanel angezeigt AWT, Swing, JavaFX & SWT 7
L 2D-Grafik Bild in Richtung Maus drehen AWT, Swing, JavaFX & SWT 18
C Bild in JFrame AWT, Swing, JavaFX & SWT 8
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
I SWT Bilder, bzw. ein einzelnes Bild AWT, Swing, JavaFX & SWT 6
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
T Mit getSubimage ruckelt das Bild AWT, Swing, JavaFX & SWT 7
T Bild drehen ohne Resize AWT, Swing, JavaFX & SWT 3
A Bild in JLabel skalieren AWT, Swing, JavaFX & SWT 4
A Bild über Imageviewer auf GUI anzeigen AWT, Swing, JavaFX & SWT 3
D 3D-Grafik [JOGL] streifen im bild AWT, Swing, JavaFX & SWT 2
D Bild bewegen mit Tastendruck AWT, Swing, JavaFX & SWT 7
H Bild wird nicht angezeigt, Fehlercode unverständlich AWT, Swing, JavaFX & SWT 5
J 2D-Grafik Bildteile in ein anderes Bild speichern AWT, Swing, JavaFX & SWT 12
C Swing ImageIcon mit Bild aus Temp-Verzeichniss füllen AWT, Swing, JavaFX & SWT 15
J Swing Bild laden, Kreise drin malen, Schreiben AWT, Swing, JavaFX & SWT 2
S Bild skalieren AWT, Swing, JavaFX & SWT 3
D Bild in JFrame nur kurz da AWT, Swing, JavaFX & SWT 9
H Bild mit KeyListener verschieben AWT, Swing, JavaFX & SWT 2
GianaSisters Bild wird S/W gespeichert. AWT, Swing, JavaFX & SWT 4
O Bild auf das JLabel AWT, Swing, JavaFX & SWT 10
D Swing Text auf Bild legen AWT, Swing, JavaFX & SWT 7
S Ein externes Bild in ein JFrame einfügen AWT, Swing, JavaFX & SWT 8
J Swing Bild wird nicht auf JLabel angezeigt AWT, Swing, JavaFX & SWT 12
S Swing Bild auf jPanel nach Änderung von JComboBox zeichnen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben