可以从一个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将表面“复制”到打印机。
提前谢谢。
发布于 2013-08-19 22:11:44
是的,这是可能的,这就是在许多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);编辑:嘿,我意识到这并不完全像above...lemme想的那样。
Edit2:好的,上面仍然可以用作示例,但是从一个图像绘制到另一个图像的步骤顺序应该是这样的: 1.使用drawGraphics()从Graphics2D对象到图像/BufferedImage对象。2.从上面的图像/BufferedImage中,使用itscreateGraphics()提取其成员Graphics2D对象。
发布于 2015-07-01 03:36:10
看起来你可以做以下两件事之一:
https://stackoverflow.com/questions/18315716
复制相似问题