簡體   English   中英

將Graphics2D繪制到另一個Graphics2D

[英]Draw Graphics2D to another Graphics2D

可以從一個Graphics2D繪制到另一個Graphics2D嗎?

讓我解釋。 我有打印問題,當我在屏幕上顯示JTextAreaJTextPanel時,內部使用sun.java2d.SunGraphics2D ,但是當我打印其使用的sun.print.PeekGraphicssun.awt.windows.WPathGraphics 問題出在某些字體上,比如Arial。 在某些尺寸中,線條被切割。 我已經嘗試了很多方法來渲染打印中的文本, Graphics2D.drawStringSwingUtilities2.drawStringTextLayout.drawString ,但在某些情況下仍然會剪切線條,或者沒有剪切線條,但是某種理由會使消失的白色空間變得消失。

所以我的想法是嘗試使用sun.java2d.SunGraphics2D渲染組件,並通過sun.print.PeekGraphicssun.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM