Stauchen von gezeichnetem Gesamtbild (paint,graphics,print)

  • Themenstarter Themenstarter Pilger
  • Beginndatum Beginndatum
P

Pilger

Hallo zusammen!
Erstmal will ich sagen, dass das Forum mir dauernt schon hilft bei meinen Problemstellungen! Ist immer meine erste Anlaufstelle und meistens finde ich schnell lösungen von ähnlichen problemen die mir weiterhelfen! Großes LOB und Danke!

Aber jetzt hab ich ein Problem wo ich nirgends eine Lösung finde:
Ich habe ein Panel auf das eine ganze Menge zeugs gemalt wird: Ein Hintergrundbild, Kreise rechtecke, Strings etc. ... eben mit der überschriebenen methode paint(graphics g) !

Nun will ich das ganze bild drucken, das funktioniert auch soweit... bloss dass das bild so gross ist dass es weit über die Bildränder hinaus geht so dass nur ca. das linke obere viertel gedruckt wird!
Das bild sollte halt so gross sein (ca. 750*1024) damit es auf dem bildschirm groß zu sehen ist aber beim druck sollte es halt auf eine DIN4 seite passen!
Ich dachte auch es geht über das Druckmenu(Druckertreiber) aber fehlanzeige!

Also bräuchte ich eine Graphics o.ä. Methode die mir ein fertig gemaltes Bild im ganzen staucht!
Auch bei Graphics2D wurde ich nicht fündig, wobei ich auch nicht wirklich weiss wie mit g2d umzugehen ist.

Eine möglichkeit ist mir eingefallen dass ich 2 paintmethoden schreibe wo bei dem 2ten alle koordinaten kleiner sind, aber ich hätte lieber eine bessere möglichkeit ;)

Hier meine print methode... wo g.translate(xy) steht müsste halt am besten so eine methode aufgerufen werden wie g.stauchealles(x,y,gewünschte neue breite,gewünschte neue höhe) .... habe gehofft dass methoden wie setClip, clipRect mein problem in angriff nehmen, doch is leider nicht so!
Code:
public int print(Graphics g, PageFormat pageFormat, int pageIndex) 
	        {	  
	        	if (pageIndex > 0) 
	        	{
	        		return(NO_SUCH_PAGE);
	        	} else 
	        	{
	        		int x = (int)pageFormat.getImageableX() + 1;
	        		int y = (int)pageFormat.getImageableY() + 1;
	        		g.translate(x,y);
	        		RepaintManager currentManager = RepaintManager.currentManager(this);
	        		currentManager.setDoubleBufferingEnabled(false);
	        		this.paint(g);
	        		currentManager.setDoubleBufferingEnabled(true);
	        		return(PAGE_EXISTS);
	        	}
	        }

Danke im voraus, Pilger :)
 
Zuletzt bearbeitet von einem Moderator:
Finde ich interresannt die Frage. Eine direkte Antwort habe ich nicht, aber eine Idee:
Male doch deine ganzen Grafiken in ein Bild. Dieses kannst du mit einem AffineTransform Objekt verändern und mit setToScale oder ähnliches Skalieren. Einfach mal in die API gucke.

Viel Glück ;)
 
Bisher habe ich noch nie Graphik ausgedruckt, aber was Skalieren von in Grafiken, die durch die shapes oder linien etc erzeugt werden, habe ich mich immer der Verhältnisrechnung (3-Satz) bedient. funktioniert am Bildschirm blendend.
Du muss dazu die Punkte, die Shapes und Linien beschreiben mit einem Skalierungsfaktor multiplizieren. Falls Du die Sachen ineraktiv zeichnest, dann natürlich auch die Maus-Koordinaten. Analog funktioniert das vielleicht auch mit Deinem Drucken.
 
Zurück