首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Graphics2D绘制到另一个Graphics2D

将Graphics2D绘制到另一个Graphics2D
EN

Stack Overflow用户
提问于 2013-08-19 21:59:58
回答 2查看 2.3K关注 0票数 5

可以从一个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将表面“复制”到打印机。

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-08-19 22:11:44

是的,这是可能的,这就是在许多Java游戏中双缓冲是如何实现的。您需要的是Graphics2D的drawImage()方法,它接受另一个Graphics2D对象进行绘制。例如,来自我的一个小游戏:

代码语言:javascript
复制
   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();
        ...
    }

其他地方:

代码语言:javascript
复制
/*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对象。

票数 2
EN

Stack Overflow用户

发布于 2015-07-01 03:36:10

看起来你可以做以下两件事之一:

  • 在图像上创建Graphics2D,执行渲染,然后将图像绘制到另一个Graphics2D
  • 中,或使用Graphics.create()方法从原始Graphics2D创建Graphics2D,然后执行渲染。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18315716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档