对于这两种重绘方法,优缺点都有。
第一种方法:是通过队列来进行的。
这个队列可以是自己创建的。也可以是系统自带的。简单说是通过队列来存储你画的信息。
但是除了这些,你还要创建一个形状类
这里包括一些你需要的属性,列如:
public class Array {
//形状类的属性
public int type;
public int num;
public Color color;
public int x1,x2,y1,y2;
}
这个形状类包括命令状属性,颜色,以及四个坐标。
我们在鼠标监听器的一些方法里画形状,在哪些代码后看,立即存入这些数据。
如:直线
if (type1.equals("line")) {
BasicStroke stroke=new BasicStroke(1);
((Graphics2D) g).setStroke(stroke);
g.drawLine(x1, y1, x2, y2);
// 创建一个形状对象
Array f1 = new Array();
// 把你画的坐标存在我新创造的数组
f1.type = 1;
f1.x1 = x1;//这里存入四个坐标
f1.y1 = y1;
f1.x2 = x2;
f1.y2 = y2;
f1.color = g.getColor();//存入颜色
arc.add(f1);//最后把整个形状类存入队列里
}
我们已经成功将数据存入里面。那么该怎样调用呢?
我们画的直线,是在画布上。所以重绘的方法,也应该在画布上。
利用paint这个方法。
//重绘直线
if(arr.type==1){
g.setColor(arr.color);//取出画布上直线的颜色
BasicStroke stroke=new BasicStroke(1);
((Graphics2D) g).setStroke(stroke);
g.drawLine(arr.x1, arr.y1, arr.x2, arr.y2);//取出四个坐标开始画直线
}
到这里重绘一个直线基本完成。其它的形状,过程一样。
接下来让我们看另一种重绘方法,是通过截屏来实现的。其原理为获得一个截屏,记录
每一点的颜色。重绘时,每一点颜色展示出来。即可以重绘了。代码如下:
获取截屏过程
需要调用机器人方法,故先创建一个机器人对象
需注意的是,机器人不能通过new来直接创建
java.awt.Robot robot;
避免出现数据处理异常,要写一下代码
try {
robot = new Robot();
} catch (Exception ef) {
ef.printStackTrace();
}
}
这个createScreenCapture方法习惯性写在构造方法里。也就是说只要构造方法在,
这个机器人对象就一定存在.但是这个方法需要传入一个区域对象Rectangle。而创建
这个对象又需要传入两个参数。分别是截屏的左上角坐标和以及截屏的大小。于是所有的
数据准备好了。再创建一个数组,来记录每一点的颜色。代码如下:
Object obj = e.getSource();
// 由于监听器是加在Jpanel上的,所以事件源对象一定是Jpanel类型的对象
JPanel drawPanel = (JPanel) obj;
// 获取drawPanel左上角的相对于屏幕的位置
Point point = drawPanel.getLocationOnScreen();
// 获取drawPanel的大小
java.awt.Dimension dim = drawPanel.getPreferredSize();
// 创建一个要截取的区域对象(就是drawPanel所占据的区域)
java.awt.Rectangle rect = new java.awt.Rectangle(point, dim);
// 绘制完一个图像就截屏
img = robot.createScreenCapture(rect);
//创建一个Stroke
// 根据图像创建二维数组
data = new int[img.getHeight()][img.getWidth()];
// 将图像上的每一个点的颜色存储到数组中
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[i].length; j++) {
int rgb = img.getRGB(j,i);//这里需注意,这个方法需要坐标和实际相反
// 将坐标和下标对应保存颜色
data[i][j] = rgb;
}
}
两种方法的比较,就我而言。当数据不是很大时,第一种方法,程序运行次数较少。
当数据较大时,第二种想必第一种简单。也就是说,不管画成什么样,第二种方法,
记录的点颜色个数是一样的。而第一种随着形状的个数越来越多,存入的也越来越多。
相关推荐
在本文中,我们将深入探讨BMP格式的解析与保存,并结合画图板的重绘功能来讲解这一主题。 首先,我们需要理解BMP文件的结构。BMP文件分为两部分:文件头和图像数据。文件头包含文件信息,如文件大小、图像宽度、...
为了提供类似Windows画图板的橡皮擦功能,Java画图板应用可能实现了两种模式:一种是使用特定的橡皮擦工具,另一种是将画笔颜色设置为背景色,从而达到擦除的效果。此外,添加形状绘制功能,如矩形、圆形和多边形,...
这可能是通过设置一个特定的颜色(如背景色)和不透明度,然后在指定区域内重绘,以达到擦除效果。 5. **颜色选择**:用户可以改变画笔颜色,这需要实现颜色选择器,可能是一个颜色对话框,用户选择颜色后,将所选...
本文将详细解析"android画图板"这个主题,介绍如何在Android中实现一个基本的画线功能,并探讨两种不同的实现方法。 首先,我们要了解Android中的画布(Canvas)和画笔(Paint)概念。Canvas是Android图形系统的一...
4. **重绘机制**:为了保证画图板的实时性,开发者可能利用了JAVA的重绘机制,如`repaint()`方法,当画布上的内容发生变化时,会自动调用该方法进行更新,确保用户能即时看到画图的效果。 5. **图像处理**:除了...
一般视图缩放的实现是通过DC的两个函数来实现:SetViewportExt和SetWindowExt,但是这两个函数只在MM_ISOTROPIC和MM_ANISOTROPIC这两种映射模式下有效果,而常用的带滚动条的视图类CScrollView却不支持这两种模式...
5. **橡皮擦功能**: 橡皮擦功能的实现可能有两种方式:一是改变绘图颜色为背景色,二是记录画布上的像素信息并在需要时恢复。后一种方法更为精确,但实现起来也相对复杂。 6. **事件处理**: 用户交互是通过监听鼠标...
4. **重绘优化**:与Java类似,C#的画图板也需要考虑重绘优化,可能通过`OnPaintBackground`方法和双缓冲技术来防止屏幕闪烁。 5. **数据绑定**:在C#中,可以利用数据绑定将用户界面元素(如颜色选择器、线条宽度...
4. **重绘机制**:当画图板需要更新时,如清除屏幕或覆盖现有图形,我们需要重绘整个窗口。这通常通过覆盖`OnPaint`方法来完成,使用`Graphics`对象绘制所有图形。 5. **图形状态保存和恢复**:`Graphics`对象提供`...
虽然功能相对有限,但该项目在开发过程中运用了两种重要的技术——橡皮筋技术和双缓存技术,这在图形用户界面的设计中具有一定的实践价值。 首先,我们来探讨一下**橡皮筋技术**。橡皮筋技术常用于实现拖拽选择或者...
- **图形文件保存与重绘**:软件支持将绘制的图形保存为WMF(Windows Metafile)格式,这是一种矢量图形文件格式,能够保留图形的所有细节而不失真。重绘功能则确保了在编辑过程中图形能够实时更新显示,通常通过...
### MFC 画图板程序知识点详解 #### 1. 简介 MTJHDraw1.0是一款基于Microsoft Foundation Classes (MFC)框架的画图程序,它旨在模仿并扩展Windows自带画图程序的功能。该程序由测控0701班的学生毛天骄开发,学号为...
LabVIEW支持两种主要的绘图技术:GDI+(Graphics Device Interface Plus)和OpenGL。GDI+主要用于创建2D图形,适合日常的数据可视化;而OpenGL则提供更高级的3D绘图能力,用于构建复杂的三维模型和动画。 2. **...
5. **Paint事件**:在窗体的Paint事件处理函数中,通常会进行实际的图形绘制,因为每次窗体重绘时,都会调用这个事件。 6. **图像保存**:项目可能还包括将用户绘制的图形保存为图像文件(如BMP或PNG)的功能,这...
Java语言实现的画图程序是一种基于图形用户界面(GUI)的应用,它允许用户在屏幕上绘制各种形状,如圆形、矩形和直线,并提供了一系列的编辑功能,如线条粗细的调整、线条颜色的更改以及橡皮擦和清屏功能。...
8. **重绘机制**:为了响应窗口大小变化或其他原因导致的重绘,可以覆盖Control类的OnPaint()方法,使用Graphics对象在Paint事件中进行绘制。 9. **源代码结构**:项目通常包括多个文件,如Form1.cs(包含用户界面...
7. 世界坐标系和用户坐标系是AutoCAD中的两种坐标系,世界坐标系是固定的,用户坐标系可以自定义。 8. 绝对直角坐标、绝对极坐标、相对直角坐标和相对极坐标是AutoCAD中的四种坐标表示方式。 9. 在使用AutoCAD绘图...
退出“画图”窗口有两种方式:点击标题栏的“关闭”按钮或选择“文件”菜单中的“退出”命令。 课堂小结回顾了画图程序的基本操作,强调了铅笔工具的使用和颜色选择。扩展练习鼓励学生创新,设计出“美丽家园”的...
在Android中,通常有两种方式实现屏幕上的图形绘制:`View`和`SurfaceView`。`View`适合于更新频率较低、交互性强的图形,而`SurfaceView`适用于需要高性能连续动画的场景。根据描述,此源码可能基于`View`类进行了...