[英]Draw Graphics2D to another Graphics2D
可以從一個Graphics2D
繪制到另一個Graphics2D
嗎?
讓我解釋。 我有打印問題,當我在屏幕上顯示JTextArea
或JTextPanel
時,內部使用sun.java2d.SunGraphics2D
,但是當我打印其使用的sun.print.PeekGraphics
和sun.awt.windows.WPathGraphics
。 問題出在某些字體上,比如Arial。 在某些尺寸中,線條被切割。 我已經嘗試了很多方法來渲染打印中的文本, Graphics2D.drawString
, SwingUtilities2.drawString
, TextLayout.drawString
,但在某些情況下仍然會剪切線條,或者沒有剪切線條,但是某種理由會使消失的白色空間變得消失。
所以我的想法是嘗試使用sun.java2d.SunGraphics2D渲染組件,並通過sun.print.PeekGraphics
或sun.awt.windows.WPathGraphics
將表面“復制”到打印機。
提前致謝。
是的它可能,這就是如何在許多Java游戲中實現雙緩沖。 你需要的是Graphics2D的drawImage()方法,它接受另一個Graphics2D對象來繪制。例如,從我的一個小游戲:
private Main(){
...
/* Create the backbuffer as a BufferedImage object */
this.doubleBuffer = new BufferedImage(this.WIDTH, this.HEIGHT, BufferedImage.TYPE_INT_RGB);
/* create a Graphics 2D object to draw INTO this backbuffer */
this.doubleBufferG2D = (Graphics2D) doubleBuffer.createGraphics();
...
}
別的地方:
/*Now lets draw the backbuffer INTO the screen */
g2d.drawImage(doubleBuffer, null , 0, 0);
編輯:嘿,我意識到它不完全如上所述...... lemme想一想。
Edit2:好的,上面仍然可以使用一個樣本,但是從一個Graphics2D到另一個Graphics2D繪制的步驟順序應該是這樣的:1。使用drawGraphics()從Graphics2D對象到Image / BufferedImage對象。 2.從上面的Image / BufferedImage中,使用itscreateGraphics()提取其成員Graphics2D對象。
看起來你可以做以下兩件事之一:
在圖像上創建Graphics2D,進行渲染,然后將圖像繪制到另一個Graphics2D中
或使用Graphics.create()方法從原始Graphics2D創建Graphics2D,然后進行渲染。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.