可以从一种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);
编辑:呵呵,我意识到它与上面的不完全相同...我想想就可以了。
Edit2:好的,上面的示例仍然可以使用,但是从一个Graphics2D绘制到另一个Graphics2D的步骤顺序应该是这样的:
1.使用drawGraphics()从Graphics2D对象到Image/BufferedImage对象。
2.从上面的Image/BufferedImage中,通过使用其createGraphics()提取其成员Graphics2D对象。
关于java - 将Graphics2D绘制到另一个Graphics2D,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18315716/