BufferedImage.getSubimage ? paintComponent ?

Status
Nicht offen für weitere Antworten.

ulr!ch

Bekanntes Mitglied
Hi JavaGmeinde,

ich habe hier ein Problem mit einem BufferedImage. Also ich habe eine print-Routine geschrieben, die Components ausdruckt, so dass ich um Bilder usw. ausdrucken zu können, diese zuerst auf ein z. B. Label painten muss.
Die entscheidende Stelle ist IMHO folgende:
Code:
	  BufferedImage image = new BufferedImage(jTabbedPane.getComponent(jTabbedPane.getSelectedIndex()).getWidth(),
						  jTabbedPane.getComponent(jTabbedPane.getSelectedIndex()).getHeight(),
						  BufferedImage.TYPE_INT_RGB);
          BufferedImage imageRed = image.getSubimage(150,150,100,100);
	  Graphics g = imageRed.getGraphics();
	  jTabbedPane.getComponent(jTabbedPane.getSelectedIndex()).paint(g);
Zwar ist das entstehende Bild die angegebenen 100 x 100 Pixel groß. Jedoch liegt die Ecke links oben nicht bei den Koordinaten 150, 150, sondern bei 0,0. Was mache ich falsch? Eigentlich ist egal, welche Angaben ich für die x- und y-Koordinaten mache, es hat keinen Einfluss. Muss ich das Bild erst auf einer Componente zeichnen, muss ich es erst mit create(); aufrufen? An paint()/ paintComponent() kann es eigentlich nicht liegen, da ich das schon ausprobiert habe.
Insgesamt schlage ich mich schon 2 Tage mit den unterschiedlichsten Lösungsansätzen rum, und stehe deshalb am Rand der Verzweiflung. :(

Falls jemand Abhilfe weiß oder einen anderen kreativen Lösungsansatz hat, wäre ich sehr dankbar.

By<e Ulrich
 

ulr!ch

Bekanntes Mitglied
Wie das halt so ist, kaum hat man was hingeschrieben, hat man per try-and-error selbst die Lösung gefunden, wenn man Sie auch nicht erklären kann:
Code:
  try {
		ImageIO.write(image.getSubimage(200,100,100,100), "png", fileSave);
	      }
	      catch (IOException ioex) {
		System.out.println(ioex);
	      }
funktioniert, wohingegen
Code:
 BufferedImage image = new BufferedImage(jTabbedPane.getComponent(jTabbedPane.getSelectedIndex()).getWidth(),
                    jTabbedPane.getComponent(jTabbedPane.getSelectedIndex()).getHeight(),
                    BufferedImage.TYPE_INT_RGB);
          BufferedImage imageRed = image.getSubimage(150,150,100,100);
     Graphics g = imageRed.getGraphics();
     jTabbedPane.getComponent(jTabbedPane.getSelectedIndex()).paint(g);

  try {
		ImageIO.write(imageRed), "png", fileSave);
	      }
	      catch (IOException ioex) {
		System.out.println(ioex);
	      }
nicht funktioniert.
Wer's versteht, kann sich ja melden. :)

By<e Ulrich
 
B

Beni

Gast
Du generierst ein Bild "image".
Du schneidest das Rechteck 150,150,100,100 aus "imageRed". Dies ist wieder ein Image, und hat als solches nur eine Breite/Höhe, aber keine Position.
Nun erstellst du ein Graphics. Dieses Graphics bildet 0/0 oben links im "imageRed" ab (die Information, dass oben links eigentlich 150/150 sei, ist schon lange verloren).

Einfacher wäre es: direkt das Bild "imageRed" mit der Grösse 100/100 zu initialisieren, das Graphics herzustellen, dann zu einem Graphics2D casten und dann "translate( -100, -100 )" anwenden (danach zeichnen).
 

ulr!ch

Bekanntes Mitglied
Danke für die Antwort, die ein wenig Licht ins Duckel gebracht hat.
Ich habe jetzt noch folgendes Problem:
Wie kann ich ein BufferedImage auf eine Componente zeichnen?

Mit folgendem Code klappt es jedenfalls leider nicht:
Code:
	  BufferedImage image = new BufferedImage(jTabbedPane.getComponent(jTabbedPane.getSelectedIndex()).getWidth(),
						  jTabbedPane.getComponent(jTabbedPane.getSelectedIndex()).getHeight(),
						  BufferedImage.TYPE_INT_RGB).getSubimage(61,16,650,500);
	  Graphics g = image.getGraphics();
	  JPanel c = new JPanel();
	  c.paintComponents(g);
	  printManagement.printComponent(c);

Weißt du vielleicht eine Möglichkeit?

By<e Ulrich
 
B

Beni

Gast
Du willst das Bild anzeigen?

Dann musst du die "paintComponent"-Methode eines JComponent (z.B. eines JPanels) überschreiben, und darin dein Bild zeichnen (g.drawImage...). Das gibt also eine neue Klasse in deinem Programm.

Alternativ kannst du ein "ImageIcon" herstellen, und einem JLabel übergeben (setIcon). Das Label wird dann das Bild zeichnen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D BufferedImage resize Allgemeine Java-Themen 16
RalleYTN JOGL Texture in BufferedImage konvertieren Allgemeine Java-Themen 1
M Input/Output BufferedImage vertauscht width und height Allgemeine Java-Themen 6
G BufferedImage und ByteArray Allgemeine Java-Themen 2
P Threads BufferedImage, Thread Concurrency Allgemeine Java-Themen 1
M Problem mit BufferedImage und PrinterJob im Querformat Allgemeine Java-Themen 1
T BufferedImage verändert sich beim Einlsesen Allgemeine Java-Themen 1
M BufferedImage toString() überschreiben Allgemeine Java-Themen 5
Thallius PDF von einem BufferedImage erstellen Allgemeine Java-Themen 1
S BufferedImage vergleich mit Subimage Allgemeine Java-Themen 1
reibi OutOfMemoryError bei Behandlung von BufferedImage's Allgemeine Java-Themen 6
TheSorm BufferedImage spiegeln Allgemeine Java-Themen 3
A BufferedImage einzelne Pixel transparent machen V2.0 Allgemeine Java-Themen 2
S Undoable BufferedImage? Allgemeine Java-Themen 2
lumo 2D-Grafik BufferedImage und operationen darauf Allgemeine Java-Themen 2
K Image zu BufferedImage konvertieren Allgemeine Java-Themen 9
H BufferedImage Invertieren Allgemeine Java-Themen 13
D md5 berechnen für BufferedImage Allgemeine Java-Themen 5
D BufferedImage rotieren Allgemeine Java-Themen 8
TiME-SPLiNTER Binary BufferedImage automatisch croppen Allgemeine Java-Themen 4
F byte[] aus einem BufferedImage Allgemeine Java-Themen 3
0 BufferedImage - Farbton verändern Allgemeine Java-Themen 5
J BufferedImage aus PNG Files haben keinen Type Allgemeine Java-Themen 4
T umwandeln BufferedImage to File Allgemeine Java-Themen 7
reibi BufferedImage nach InputStream Allgemeine Java-Themen 10
Q BufferedImage enzelne Pixel tranzparent machen Allgemeine Java-Themen 2
S BufferedImage mit Transparenten Hintergrund Allgemeine Java-Themen 4
Z Farbe des Pixels rechts unten in einem BufferedImage? Allgemeine Java-Themen 4
R problem! bufferedimage speichern. Allgemeine Java-Themen 7
S BufferedImage als *.tga speichern Allgemeine Java-Themen 3
H Pixel im BufferedImage Manipulieren ? Allgemeine Java-Themen 17
Steev BufferedImage und setRGB() Allgemeine Java-Themen 10
P miese performance bei nem BufferedImage + repaint :( Allgemeine Java-Themen 6
M Drucken mit BufferedImage Allgemeine Java-Themen 9
M Problem mit Durchsuchen von BufferedImage Allgemeine Java-Themen 10
I BufferedImage etc Allgemeine Java-Themen 6
F BufferedImage -> Image Allgemeine Java-Themen 4
G BufferedImage benutzen Allgemeine Java-Themen 6
T Bilder schnell in BufferedImage laden Allgemeine Java-Themen 4
G BufferedImage zeichnen Allgemeine Java-Themen 4
T BufferedImage aus einem byte-Array? Allgemeine Java-Themen 2
T BufferedImage problem Allgemeine Java-Themen 6
K 32-Bit grayscale BufferedImage Allgemeine Java-Themen 2
T Geschwindigkeit bei Polygonen und BufferedImage Allgemeine Java-Themen 9
Y paintComponent zeigt nix an Allgemeine Java-Themen 3
F paintComponent() nicht automatisch ausführen? Allgemeine Java-Themen 5
A Swing paintcomponent komischer Fehler Allgemeine Java-Themen 6
E paintComponent() aufrufen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben