`
杨杨和花花
  • 浏览: 21729 次
  • 性别: 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;
}
    }
    两种方法的比较,就我而言。当数据不是很大时,第一种方法,程序运行次数较少。
     当数据较大时,第二种想必第一种简单。也就是说,不管画成什么样,第二种方法,
     记录的点颜色个数是一样的。而第一种随着形状的个数越来越多,存入的也越来越多。
    


 

分享到:
评论

相关推荐

    画图板 代码 画图板 代码 画图板 代码

    画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码...

    java画图板java画图板

    java画图板java画图板java画图板

    画图板源码示例画图板源码示例

    画图板源码示例画图板源码示例画图板源码示例

    画图板,window画图板

    动态画图,画图板,可以动态画图,基本画图功能

    java 画图板 windows画图板简单实现

    用java实现的windows画图板的简单模式,对于java初学者的事件触发器学习有很好的帮助。。。

    仿windows画图板

    仿windows画图板程序,基本实现windows画图板的功能

    win10画图板软件下载

    win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10...

    基于qt实现的画图板

    基于qt实现的画图板,内含基本的绘画功能,例如选取画笔,填充,图像打开和保存等。

    JAVA简易画图板

    简易画图板。有基本形状绘制,加铅笔和橡皮,可撤销清除。可保存打开。

    Java画图板应用

    画图板应用程序,基于Java编写而成,可以实现windows下画图板相似功能

    画图板_Vc_

    类似Windows画图板的小程序,功能和界面全部模仿于Windows自带的画图板,界面如截图。功能主要有: 手绘线、简单图形、文字输入、图块拖放、重复撤销、画面缩放、打开保存图片文件

    仿XP画图板

    自己做的一个仿XP的画图板练手 实现了画图板大多数常用功能 界面和XP的画图板非常相似 可以给新手参考用

    画图板,图形处理,模仿window画图板

    画图板,图形处理,简单绘图, 画图板,图形处理,简单绘图 画图板,图形处理,简单绘图 画图板,图形处理,简单绘图

    canvas 画图板.zip

    canvas 画图板的实现

    C# 高仿 Windows 画图板

    C# 高仿 Windows 画图板,实现图片的打开/保存/文字绘制/矩形/圆形/椭圆形/圆角矩形/画刷/画笔/喷枪/曲线/取色等功能。

    C# 画图板 源码

    C# 画图板 源码 NET1.1 2.0 主要应用了绘图功能。来自CNBlogs的一位大侠的东东个人觉得不错

    C++画图板程序

    C++大作业,用MFC单文档实现画图板程序

    java swing 画图板

    java swing 实现的仿照win的画图板,欢迎交流学习

    画图板绘图工具

    画图板工具里面包含了基本图形的绘图功能,功能全,操作简单。是vs平台上基于c#语言的开发程序

    java画图板

    Java简单swing程序,模拟实现windows画图板的功能,实现规则、不规则图形的绘制,颜色填充,撤销重绘等功能

Global site tag (gtag.js) - Google Analytics