Java 绘画程序

Java 绘画程序,java,Java,我正在写一个简单的绘画程序。为了模拟铅笔画,我将绘制的点存储在一个集合中,因此当窗口调整大小时,这些点不会消失,每当添加另一个点时,我调用“重新绘制”方法“绘制”方法在屏幕上绘制阵列中的所有绘制。但当点数增加时,程序运行缓慢。 有没有更有效的方法来实现这一点?由于您没有给出任何代码,我猜您正在使用基本的绘图方法,如绘制直线或点 一个好的选择是使用该技术进行绘制。查找 您可以做的是创建一个Shape类,它会根据您要绘制的矩形、三角形、点、线等而有所不同。。即使现在只绘制点,也应该这样做 创建形状时

我正在写一个简单的绘画程序。为了模拟铅笔画,我将绘制的点存储在一个集合中,因此当窗口调整大小时,这些点不会消失,每当添加另一个点时,我调用“重新绘制”方法“绘制”方法在屏幕上绘制阵列中的所有绘制。但当点数增加时,程序运行缓慢。
有没有更有效的方法来实现这一点?

由于您没有给出任何代码,我猜您正在使用基本的绘图方法,如绘制直线或点

一个好的选择是使用该技术进行绘制。

查找

您可以做的是创建一个Shape类,它会根据您要绘制的矩形、三角形、点、线等而有所不同。。即使现在只绘制点,也应该这样做

创建形状时,请使用代码检查要创建的形状,例如switch/case语句:

...
         case PENCIL:
            if (generalPath == null) {
               generalPath = new GeneralPath();
               generalPath.moveTo(p1.x, p1.y);
            } else {
               generalPath.lineTo(p2.x, p2.y);
            }
            shape = generalPath;
            break;
...

在绘制的代码中,只需调用repaint即可绘制形状。

获得恒定速度重新绘制的最快方法是将绘制的整个图像存储为位图,当然,在用户绘制时更新它。通过这种方式,您可以重新绘制正确的内容,甚至可以添加滚动条等。例如,可以保留撤消功能的点阵列

相反,如果你想制作一个矢量绘图程序,那么你必须保留单独的基本操作,如直线、矩形等。在这种情况下,保留一个用于快速重新绘制的图像仍然是值得的,现在的诀窍是如何在用户修改绘图时(例如,通过调整矩形大小)高效地更新该图像。一种方法是将绘图区域平铺为许多较小的区域,因此只需重新计算与用户修改的对象相交的部分的基础图像


在这两种技术中,您都会使用双缓冲,这样用户就不会感觉到闪烁。但仅使用双缓冲,重新绘制整个点集的速度仍然很慢。

可能是因为每次重新开始绘制时,桶都会离得更远。