Tag: java 2d

如何在Graphics2D上下文中的Path2D对象上设置Rectangle的动画

我刚刚开始学习有关Graphics2D类的基础知识,到目前为止,我能够绘制不同的对象并实现ActionListener以便通过onKeyPress在屏幕上实际移动它们。 到目前为止一切都那么好,虽然我想做一些更复杂的事情。 我想给出一个我的对象的路径 ,并仅在该特定路径上制作动画。 有点像,我会在天空画一条线,一架飞机应该坚持画线并保持自己在那条特定线上飞行。 现在有可能吗? 我不需要任何类型的代码,但是很少有不同的方法或想法可以让我开始研究这个问题。 我想法的可视化阐述如下。 起点 : 终点: 现在如上图所示,我的黄色框(在未来的平面中)应该在动画时保持给定的路径(路径灰线) 我到目前为止的研究, 我搜索了我的流行语,比如java中的路径,找到了Path2D和GeneralPath类,有谁知道我是否可以用它来解决这个问题。 谢谢

比较两个BufferedImages之间像素值的最快方法?

我有一个TYPE_INT_BGR类型的BufferedImage。 我需要与另一个BufferedImage进行逐像素比较,以计算两个图像之间的“距离”。 我有一些有用的东西,但很慢。 我从“参考”图像中获取一个像素,将其分解为RGB字节: int pixel = referenceImage.getRGB(col, row); int red = (pixel >> 16) & 0xff; int green = (pixel >> 8) & 0xff; int blue = (pixel) & 0xff; 我将r / g / b值与候选图像的相应像素进行比较,并将差值求平方。 有没有更快的方法来进行这种比较? 窥视JRE源代码,我看到BufferedImage.getRGB()实际上是将光栅中的RGB值组合在一起,这对我来说是浪费的,因为我只是将它再次分解为字节。 我将尝试直接尝试,但我想知道是否有更好的方法来做到这一点,无论是通过我可能错过的Java或第三方API。

Java创建浮雕(红/蓝图像)

我正在编写一个Java游戏引擎( http://victoryengine.org ),我一直在尝试生成带有红色/蓝色眼镜的深度“3d”图像。 我正在使用Java2D进行图形处理。 我创造了一些有效的东西,但速度很慢(通过手动复制像素值和类似的东西)。 我需要的是两个BufferedImages(一个用于左眼,一个用于右侧)并将它们组合成一个(另一个缓冲区或直接连接到屏幕)。 对于一个我只想要红色通道,而另一个我想要绿色和蓝色通道。 最快的方法是什么?

AffineTransform没有改变中风?

当使用带有两个不同参数的Graphics2D scale()函数(在x和y方向上按不同比例缩放)时,稍后在此Graphics2D对象上绘制的所有内容也会缩放。 这具有奇怪的效果,即在一个方向上绘制的线比在另一个方向上绘制的线更粗。 以下程序产生此效果,它显示此窗口: public class StrokeExample extends JPanel { public void paintComponent(Graphics context) { super.paintComponent(context); Graphics2D g = (Graphics2D)context.create(); g.setStroke(new BasicStroke(0.2f)); int height = getHeight(); int width = getWidth(); g.scale(width/7.0, height/4.0); g.setColor(Color.BLACK); g.draw(new Rectangle( 2, 1, 4, 2)); } public static void main(String[] params) { EventQueue.invokeLater(new Runnable(){public void run() { StrokeExample example = new […]

JPanel中的JLabel动画

在刮擦后我发现最好通过扩展JLabel来实现自定义图像组件。 到目前为止,这已经很有效,因为我可以添加多个“图像”(jlabels没有布局中断。我只是有一个问题,我希望有人可以为我回答。 我注意到为了在屏幕上为setlayout(null);制作动画,我需要setlayout(null); 和组件的setbounds ,然后动画最终setlocation(x,y); 。 这是动画组件的最佳实践还是可怕的方法? 我计划最终制作一个动画课,但我不想这样做,最后不得不把它扔掉。 我已将相关代码包含在内,以便快速查看。 import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JPanel; import javax.swing.Timer; public class GraphicsPanel extends JPanel { private Timer timer; private long startTime = 0; private int numFrames = 0; private float fps = 0.0f; private int x = 0; GraphicsPanel() { final […]

无法用Java2D绘制细线

我正在尝试绘制一个1像素的笔画。 因为整个多边形按100缩放,我将线宽设置为0.01。 但是出于某种原因,多边形被绘制的屏幕线宽看起来是100像素而不是1。 我使用GeneralPath作为多边形形状。 如果我使用相同的方法绘制Line2D形状,则会绘制细线。 g2d.scale(100, 100); g2d.setStroke(new BasicStroke(0.01f)); g2d.draw(theShape); 新信息:如果我删除了setStroke行,我正确得到一个2像素的行,因为早先在Graphics2D对象上设置了0.02f的BasicStroke。 这是真正的setStroke系列 g.setStroke(new BasicStroke((float) (1f / getRoot().scaleX)));

通过Path2D检测鼠标指针

我构建了一个Path2D ,它表示由直线组成的未闭合形状: 我希望能够检测何时单击鼠标并且鼠标指针靠近路径(在几个像素内)。 使用contains方法不起作用,因为算法将未闭合的形状视为隐式闭合(即通过在起点和终点之间绘制一条直线)。 有谁知道实现这个目标的另一种机制?

硬件加速java中的位图绘制

我希望能够在java中尽快绘制video的连续位图(类型为BufferedImage.TYPE_INT_RGB)。 我想知道这样做的最佳方法。 有没有人有任何建议我应该从哪里开始? 根据我的阅读,有两个选项:1)在使用JAWT的JNI dll中使用GDI / GDI +例程(我在Windows上)2)使用Java3D并将Textures应用到Box的脸部并将其旋转到相机 我对这些主题以及其他任何建议都很感兴趣。 当我创建一个ActiveX控件时,我在VB中做了大量的GDI / GDI +编程,所以使用GDI应该是无痛的,但我猜测Java3D会更多地利用GPU(我可能会错)并提供更好的性能。 你怎么看? GDI和JAWT与我以前的经验,或者与Java3D一起开始和新的API之旅。 提前致谢。 🙂

尝试使用JPanel绘制线条

我正在尝试使用JPanel绘制线条,而且我已经打了一些墙。 我可以将两面朝下,但一旦从x线中减去它就会出错。 package GUIstuff; import java.awt.Graphics; import javax.swing.JPanel; public class DrawPanel extends JPanel{ public void paintComponent (Graphics g){ super.paintComponent(g); int width = getWidth(); int height = getHeight(); int drawCounter = 0; // counters for all the while statements int drawCounter2 = 0; int drawCounter3 = 0; int drawCounter4 = 0; int x1 = 0; // […]

什么是Java2d更快的替代品?

我正在寻找一些物理模拟,我需要在Java中快速渲染。 我过去遇到过Java2d的性能问题,那么快速的选择是什么? JOGL明显比Java2d快吗?