`
杨杨和花花
  • 浏览: 22440 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

画图板的两种重绘方法

阅读更多

对于这两种重绘方法,优缺点都有。
  第一种方法:是通过队列来进行的。
  这个队列可以是自己创建的。也可以是系统自带的。简单说是通过队列来存储你画的信息。
  但是除了这些,你还要创建一个形状类
  这里包括一些你需要的属性,列如:
  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文件的结构。BMP文件分为两部分:文件头和图像数据。文件头包含文件信息,如文件大小、图像宽度、...

    Java画图板应用

    为了提供类似Windows画图板的橡皮擦功能,Java画图板应用可能实现了两种模式:一种是使用特定的橡皮擦工具,另一种是将画笔颜色设置为背景色,从而达到擦除的效果。此外,添加形状绘制功能,如矩形、圆形和多边形,...

    Java简易画图板

    这可能是通过设置一个特定的颜色(如背景色)和不透明度,然后在指定区域内重绘,以达到擦除效果。 5. **颜色选择**:用户可以改变画笔颜色,这需要实现颜色选择器,可能是一个颜色对话框,用户选择颜色后,将所选...

    android画图板

    本文将详细解析"android画图板"这个主题,介绍如何在Android中实现一个基本的画线功能,并探讨两种不同的实现方法。 首先,我们要了解Android中的画布(Canvas)和画笔(Paint)概念。Canvas是Android图形系统的一...

    仿 XP 系统画图板

    4. **重绘机制**:为了保证画图板的实时性,开发者可能利用了JAVA的重绘机制,如`repaint()`方法,当画布上的内容发生变化时,会自动调用该方法进行更新,确保用户能即时看到画图的效果。 5. **图像处理**:除了...

    类似画图板的小程序-windows

    一般视图缩放的实现是通过DC的两个函数来实现:SetViewportExt和SetWindowExt,但是这两个函数只在MM_ISOTROPIC和MM_ANISOTROPIC这两种映射模式下有效果,而常用的带滚动条的视图类CScrollView却不支持这两种模式...

    用java编写的画图板程序

    5. **橡皮擦功能**: 橡皮擦功能的实现可能有两种方式:一是改变绘图颜色为背景色,二是记录画布上的像素信息并在需要时恢复。后一种方法更为精确,但实现起来也相对复杂。 6. **事件处理**: 用户交互是通过监听鼠标...

    JAVA+C#画图板

    4. **重绘优化**:与Java类似,C#的画图板也需要考虑重绘优化,可能通过`OnPaintBackground`方法和双缓冲技术来防止屏幕闪烁。 5. **数据绑定**:在C#中,可以利用数据绑定将用户界面元素(如颜色选择器、线条宽度...

    C#编的画图板

    4. **重绘机制**:当画图板需要更新时,如清除屏幕或覆盖现有图形,我们需要重绘整个窗口。这通常通过覆盖`OnPaint`方法来完成,使用`Graphics`对象绘制所有图形。 5. **图形状态保存和恢复**:`Graphics`对象提供`...

    简易画图板

    虽然功能相对有限,但该项目在开发过程中运用了两种重要的技术——橡皮筋技术和双缓存技术,这在图形用户界面的设计中具有一定的实践价值。 首先,我们来探讨一下**橡皮筋技术**。橡皮筋技术常用于实现拖拽选择或者...

    基于VC MFC程序设计——简易画图板

    - **图形文件保存与重绘**:软件支持将绘制的图形保存为WMF(Windows Metafile)格式,这是一种矢量图形文件格式,能够保留图形的所有细节而不失真。重绘功能则确保了在编辑过程中图形能够实时更新显示,通常通过...

    mfc 画图板 程序文档

    ### MFC 画图板程序知识点详解 #### 1. 简介 MTJHDraw1.0是一款基于Microsoft Foundation Classes (MFC)框架的画图程序,它旨在模仿并扩展Windows自带画图程序的功能。该程序由测控0701班的学生毛天骄开发,学号为...

    labview画图

    LabVIEW支持两种主要的绘图技术:GDI+(Graphics Device Interface Plus)和OpenGL。GDI+主要用于创建2D图形,适合日常的数据可视化;而OpenGL则提供更高级的3D绘图能力,用于构建复杂的三维模型和动画。 2. **...

    用c#编写绘图板源码(很详细的哦)

    5. **Paint事件**:在窗体的Paint事件处理函数中,通常会进行实际的图形绘制,因为每次窗体重绘时,都会调用这个事件。 6. **图像保存**:项目可能还包括将用户绘制的图形保存为图像文件(如BMP或PNG)的功能,这...

    Java语言实现的画图程序

    Java语言实现的画图程序是一种基于图形用户界面(GUI)的应用,它允许用户在屏幕上绘制各种形状,如圆形、矩形和直线,并提供了一系列的编辑功能,如线条粗细的调整、线条颜色的更改以及橡皮擦和清屏功能。...

    c# visual studio 2005 制作高仿真画图程序

    8. **重绘机制**:为了响应窗口大小变化或其他原因导致的重绘,可以覆盖Control类的OnPaint()方法,使用Graphics对象在Paint事件中进行绘制。 9. **源代码结构**:项目通常包括多个文件,如Form1.cs(包含用户界面...

    《中文版AutoCAD计算机绘图简明教程》课后习题答案.pdf

    7. 世界坐标系和用户坐标系是AutoCAD中的两种坐标系,世界坐标系是固定的,用户坐标系可以自定义。 8. 绝对直角坐标、绝对极坐标、相对直角坐标和相对极坐标是AutoCAD中的四种坐标表示方式。 9. 在使用AutoCAD绘图...

    信息技术教案——画图.pdf

    退出“画图”窗口有两种方式:点击标题栏的“关闭”按钮或选择“文件”菜单中的“退出”命令。 课堂小结回顾了画图程序的基本操作,强调了铅笔工具的使用和颜色选择。扩展练习鼓励学生创新,设计出“美丽家园”的...

    android画图源码

    在Android中,通常有两种方式实现屏幕上的图形绘制:`View`和`SurfaceView`。`View`适合于更新频率较低、交互性强的图形,而`SurfaceView`适用于需要高性能连续动画的场景。根据描述,此源码可能基于`View`类进行了...

Global site tag (gtag.js) - Google Analytics