# BufferedImage anzeigen, imageIcon oder paintComponent();



## ulr!ch (20. Feb 2006)

Hi JavaGemeinde,

verzweifel an folgendem Problem: Ich habe ein BufferedImage (das sich auch schön in einer PNG-Datei abspeichern lässt) und möchte es an meine Drucker-Routine schicken, die allerdings nur Components drucken kann. Ich möchte dazu einfach nur das BufferedImage (ohne Zwischenspeichern) auf einem Label anzeigen. Weder Code A noch B funktionierten dabei.  Weiß jemand Rat?

Möglichkeit A: Über ein ImageIcon; Resultat: *schwarze* Fläche

```
BufferedImage image = new BufferedImage(jTabbedPane.getComponent(jTabbedPane.getSelectedIndex()).getWidth(),
						  jTabbedPane.getComponent(jTabbedPane.getSelectedIndex()).getHeight()-40,
						  BufferedImage.TYPE_INT_RGB);
	  image.createGraphics();
	  ImageIcon myIcon = new ImageIcon(image);
	  JOptionPane.showMessageDialog(Auswerten.this, "Icon","A plain message",JOptionPane.PLAIN_MESSAGE, myIcon);
```

Möglichkeit B: Überschreiben der paintMethode, Resultat: *nix*!

```
// BufferedImage erstellen
	  BufferedImage image = new BufferedImage(jTabbedPane.getComponent(jTabbedPane.getSelectedIndex()).getWidth(),
						  jTabbedPane.getComponent(jTabbedPane.getSelectedIndex()).getHeight()-40,
						  BufferedImage.TYPE_INT_RGB);
	  image.createGraphics();
	  Graphics2D g2d = image.createGraphics();
	  g2d.drawImage(image, null, 100, 100);

	  JFrame frameX = new JFrame();
	  frameX.getContentPane().setLayout(new GridBagLayout());

	  MyLabelX abc = new MyLabelX(image);
	  abc.paintComponent(g2d);

// MyLabelX abc auf JFrame -> anzeigen
	  frameX.getContentPane().add(abc);
	  frameX.pack();
	  frameX.setVisible(true);
```
Mit der Klasse MyLabelX:

```
public class MyLabelX extends JLabel {
    BufferedImage image;

    public MyLabelX(BufferedImage image) {
      this.image = image;
      repaint();
    }

    public void paintComponent(Graphics g) {
      Graphics2D g2d = (Graphics2D) g;
      super.paintComponent(g2d);
      g2d.drawImage(image, 0, 0, this);
    }
  }
```

Beide Möglichkeiten führen aus irgendwelchen Gründen nicht weiter. Da das erste Beispiel mit weniger Zeilen zumindest zu einem schwarzen Rechteck kommt  würde ich gerne diesen Weg weiterverfolgen.
Weiß aber nicht mehr weiter. Hier vielleicht jemand? Bitte! :bahnhof: 

By<e Ulrich


----------



## ulr!ch (20. Feb 2006)

Hat denn niemand hier eine Idee?
Bitte!  :cry:   :bahnhof: 

By<e Ulrich


----------



## ulr!ch (20. Feb 2006)

Sorry, ich bin's noch einmal.
Ich suche schon seit drei geschlagenen Tagen im Internet herum und habe immer noch keine Lösung für das Problem gefunden. Kann ich es irgendwie weiter eingrenzen?
Das BufferedImage scheint korrekt angelegt worden zu sein, da ich es ja in in einer PNG-Datei ausgeben lassen kann. Los, ihr JavaGurus, stevg, deathbyaclown usf. ... ihr wisst doch bestimmt Rat.   

By<e Ulrich


----------



## AlArenal (20. Feb 2006)

> JLabel
> 
> public JLabel(Icon image)
> 
> ...


----------



## ulr!ch (20. Feb 2006)

Hi AlArenal!

http://java.sun.com/j2se/1.3/docs/api/java/awt/image/BufferedImage.html

By<e Ulrich
PS: Wie lange schicken wir uns jetzt Zitate?  :lol:


----------



## AlArenal (20. Feb 2006)

Du musst nur 1 und 1 zusammenzählen. Du weißt wie man aus nem BufferedImage ein ImageIcon macht und oben siehst du wie man ein Icon in einem JLabel darstellt. JLabel ist u.a. abgeleitet von Component und schon hast du deine Anforderung erfüllt.

Dass ImageIcon das Interface Icon implementiert ist eine Transferleistung deinerseits, die ich wohl erwarten kann


----------



## ulr!ch (20. Feb 2006)

Sorry AlArenal,

auch die Methoden, die ich beschrieben habe, führen zum Ziel. Aber meine print-Routine druckt nur Components, die auch visible() sind. Das muss ich mir noch einmal genauer anschauen...
Aber Danke für deine Hilfe.

By<e Ulrich


----------

