Tag: java 2d

Java2D:把graphics转换成Graphics2D总是安全的

假设我们总是使用Sun JVM(比如1.5+),将Graphics引用转换为Graphics2D总是安全的吗? 我还没有看到它导致任何问题,据我了解,Graphics类是遗留代码,但Javadevise人员不想更改Swing和AWT类的接口,以保持向后兼容性。

Java2D性能问题

我在Java2D上performance怪异。 我知道sun.java2d.opengl虚拟机参数为2D启用3D加速,但即使使用它也有一些奇怪的问题。 这是我跑的testing的结果: 在JComponent上绘制32×32像素图块的25×18地图 图片1 = .bmp格式,图片2 = A .png格式 没有-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实际上performance得更快)呢? 疯狂! .BMP Image 1被转换为TYPE_INT_RGB的图像types。 .PNG图像2被转换为TYPE_CUSTOM的图像types。 为了在使用和不使用opengl加速的情况下获得一致的速度,我必须创build一个新的带有TYPE_INT_ARGB图像types的BufferedImage,并将Image 1或Image 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将是所有系统和平台的本机图像types? 我假设这个值可能不同。 有什么方法可以让我获得本机值,以便始终可以创build新的BufferedImages以获得最佳性能? 提前致谢…

Java2D:增加线宽

我想增加Line2D宽度。 我找不到任何方法来做到这一点。 我是否需要为此实际制作一个小矩形?

绘制一个组件到BufferedImage导致显示损坏

我正在使用这里描述的JScrollNavigator组件,以便将一个导航窗口提供到一个embeddedJScrollPane的大型“canvas”CAD组件。 我试图使用JScrollNavigator绘制canvas的缩略图来为用户提供一些额外的上下文。 但是,这样做的行为会导致我的应用程序主框架的渲染被破坏。 具体来说,它是在视口组件(即我的主canvaspaint(Graphics)上调用paint(Graphics)的动作,传递由BufferedImage创build的Graphics对象,导致后续的显示损坏; 如果我评论这一行,一切工作正常。 下面是JScrollNavigator的重写paintComponent方法: @Override protected void paintComponent(Graphics g) { Component view = jScrollPane.getViewport().getView(); BufferedImage img = new BufferedImage(view.getWidth(), view.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = img.createGraphics(); // Paint JScrollPane view to off-screen image and then scale. // It is this action that causes the display corruption! view.paint(g2d); g2d.drawImage(img, 0, 0, null); Image scaled = […]

如何在java中调整文本大小

我已经看到,在Photoshop中的文本可以很容易地resize拖动它们。 我们如何在Java中做同样的事情? 任何想法如何调整文本在Java中? 添加了在Photoshop中调整字母“A”的快照 请让我知道这个代码有什么问题? public class ResizeImage extends JFrame { public ResizeImage(){ JPanel panel = new JPanel(){ public void paintComponent(Graphics g) { // In your paint(Graphics g) method // Create a buffered image for use as text layer BufferedImage textLayer = new BufferedImage(240, 240, BufferedImage.TYPE_INT_RGB); // Get the graphics instance of the buffered image […]

碰撞检测与复杂的形状

我想制作一个游戏,每个级别从图像加载。 我想在Photoshop中绘制整个关卡,然后将其设置为背景,并让玩家走过去。 我想要另一个看不见的形象,在我想要碰撞的所有地方都会变成黑色。 我不想使用瓷砖的原因,这是矩形碰撞等更容易,是因为会有复杂的angular落,并不是所有的东西都是矩形的。 这是一个好主意,可以轻松做到吗? 这会是一个大CPU的猪还是有更好的方法来做到这一点? 关卡图像 障碍以红色显示