可以从一种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);

编辑:呵呵,我意识到它与上面的不完全相同...我想想就可以了。

Edit2:好的,上面的示例仍然可以使用,但是从一个Graphics2D绘制到另一个Graphics2D的步骤顺序应该是这样的:
1.使用drawGraphics()从Graphics2D对象到Image/BufferedImage对象。
2.从上面的Image/BufferedImage中,通过使用其createGraphics()提取其成员Graphics2D对象。

关于java - 将Graphics2D绘制到另一个Graphics2D,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18315716/

10-10 15:59