问题标签 [java-2d]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
42388 浏览

java - Java 2D 绘图最佳性能

我正在编写 Java 2D 游戏。我正在使用内置的 Java 2D 绘图库,在我从 JFrame 中的 Canvas 的 BufferStrategy 获得的 Graphics2D 上绘图(有时是全屏的)。BufferStrategy 是双缓冲的。重绘是通过计时器主动完成的。不过,我遇到了一些性能问题,尤其是在 Linux 上。

Java2D 有很多方法可以创建图形缓冲区和绘制图形,我只是不知道自己是否做对了。我一直在尝试 graphics2d.getDeviceConfiguration().createCompatibleVolatileImage,它看起来很有希望,但我没有真正的证据证明如果我将绘图代码切换到它会更快。

根据您的经验,在 Java 1.5+ 中将 2D 图形渲染到屏幕上的最快方法是什么?请注意,该游戏非常领先,因此我不想切换到完全不同的绘图方法,例如 OpenGL 或游戏引擎。我基本上想知道如何以最快的方式使用 Graphics2D 对象将内容绘制到屏幕上。

0 投票
3 回答
1367 浏览

java - Java2D: Clipping a Graphics object with a Line

Is there a way to use a Graphics object's 'setClip()' method to clip using a Line-ish shape? Right now I'm trying to use a Polygon shape but I'm having problems simulating the "width" of the line. I basically draw the line, and when I reach the end, I redraw it but this time subtract the line width from y-coordinate:

It almost works but the width of the line varies based upon its slope.

I can't use the BrushStroke and drawLine() methods because the line can change color once it passes some arbitrary reference line. Is there some implementation of Shape that I overlooked, or an easy one I can create, that will let me do this more easily?

0 投票
3 回答
15526 浏览

java - Java2D:将 Graphics 转换为 Graphics2D 总是安全的吗

假设我们总是使用 Sun JVM(比如 1.5+),将 Graphics 引用转换为 Graphics2D 总是安全的吗?

我还没有看到它导致任何问题,据我了解,Graphics 类是遗留代码,但 Java 设计人员不想更改 Swing 和 AWT 类的接口以保持向后兼容性。

0 投票
3 回答
27087 浏览

java - Java2D 性能问题

我在使用 Java2D 时遇到了性能异常。我知道 sun.java2d.opengl VM 参数可以为 2D 启用 3D 加速,但即使使用它也有一些奇怪的问题。

以下是我运行的测试结果:


在 JComponent Image 1 = .bmp 格式,Image 2 = A .png 格式上绘制具有 32x32 像素图块的 25x18 地图

没有 -Dsun.java2d.opengl=true

120 FPS 使用 .BMP 图像 1
13 FPS 使用 .PNG 图像 2

使用 -Dsun.java2d.opengl=true

12 FPS 使用 .BMP 图像 1
700 FPS 使用 .PNG 图像 2

如果没有加速,我假设我在软件中执行的每个 drawImage() 都会发生某种转换,并且在 .PNG 的情况下会大大降低 FPS。但是,为什么随着加速,结果会发生变化(而且 PNG 实际上执行得更快)?!疯狂!

.BMP 图像 1 被转换为 TYPE_INT_RGB 的图像类型。.PNG 图像 2 被转换为 TYPE_CUSTOM 的图像类型。为了在使用和不使用 opengl 加速的情况下获得一致的速度,我必须创建一个图像类型为 TYPE_INT_ARGB 的新 BufferedImage,并将图像 1 或图像 2 绘制到这个新图像上。

以下是运行的结果:

没有 -Dsun.java2d.opengl=true

120 FPS 使用 .BMP 图像 1
120 FPS 使用 .PNG 图像 2

使用 -Dsun.java2d.opengl=true

700 FPS 使用 .BMP 图像 1
700 FPS 使用 .PNG 图像 2

我真正的问题是,我可以假设 TYPE_INT_ARGB 将是所有系统和平台的本机图像类型吗?我假设这个值可能不同。有没有办法让我获得本机值,以便我总是可以创建新的 BufferedImages 以获得最佳性能?

提前致谢...

0 投票
3 回答
1705 浏览

java - 滚动条的原始 Java 2D 实现

我将如何使用标准 Java 2D 编写自己的滚动条。

我真的不想使用swing,而且我已经为其他所有东西(例如按钮等)制作了自己的组件。

我并不是真的在寻找代码,而是在事件更改和绘图中涉及的数学。

0 投票
5 回答
43517 浏览

java - 使用 Java 处理简单 2D 图形的最佳 API

我不确定使用 Java 进行简单 2d 图形的最佳 api 是什么。我知道java.awt.Graphics2D是标准,但它被替换了吗?Swing 是 Java GUI 应用程序的新 API,但对于我想要的东西来说似乎有点沉重。我真正想要的是 C SDL library之类的东西。

0 投票
2 回答
350 浏览

java - groovy.swing.factory.BindProxyFactory 在哪里?

尝试使用 GraphicsBuilder 时,我得到一个java.lang.NoClassDefFoundErrorfor groovy.swing.factory.BindProxyFactory.

这是我的环境:

这就是我尝试做的事情:

BindProxyFactoryBean 在哪里?

0 投票
2 回答
1560 浏览

flash - 用于通过 Java2D 渲染矢量图形格式的开源库?

我有哪些选择可以将 Java2D 编码的图形渲染为矢量图形格式,例如 EPS、SWF、SVG、VML、PDF 和其他我可能还没有听说过的开源库?

Batik是用于渲染 SVG 的最广泛使用的库。还有哪些其他选择?

iText广泛用于呈现 PDF。是否有一些功能较少但可能更简单的东西?

对于从 Java2D 渲染 SWF (Flash),我发现Flagstone Software 的Transform SWF非常有效,即使不直观。

哪些不太受欢迎的库或刚起步的项目值得一看?

0 投票
1 回答
673 浏览

java - 代码适用于java图形,但不适用于graphics2d

在一个paintcomponent里面。它以g为参数,g可以是graphics或graphics2d。该类扩展了 jpanel。然后:

如果 g 是 graphics 它可以工作,但如果它是 graphics2d 它不会。它可以同时编译,但 graphics2d 不会改变背景颜色。怎么来的?

0 投票
3 回答
1201 浏览

java - 在 Java2D 中动态着色精灵?

我正在使用 Linux 上的 Java2D 创建一个带有类似 ascii 的地图的游戏(如 roguelike)。

通过 Graphics2D.drawImage 渲染 BufferedImages 可以渲染地形。我想动态更改每个绘制图像的色调,而不会对性能造成太大影响。我怎样才能做到这一点?

我怀疑 setComposite 是难题的一部分。目前我不需要保持背景完整(所以透明度不是问题)。我想使用多种颜色,所以预生成着色精灵对我来说不是一个解决方案。