画图板截图

来源:互联网 发布:智能变送器掌上编程器 编辑:程序博客网 时间:2024/05/20 18:43

定义一个Robot类,用鼠标按压和鼠标松开来获取两组坐标,用获取的坐标来创建一个矩形Rectangle的对象r,把r传入Robot的方法createScreenCapture中,用一个BufferdImage的对象image(设为全局)来接收Robot方法createScreenCapture的返回对象。以上image即为截到的图。

下面就是我碰到的问题以及自己的解决方法

问题:

1.截到的图位置不对。

2.截完后无法截下一张。

3.截图不能拖动

解决办法:

创建一个Jietu类(用来接收image)

public class Jietu {
BufferedImage image;
int x, y;


public jietu(BufferedImage image, int x, int y) {
this.x = x;
this.y = y;
this.image = image;
}


public void draw(Graphics g) {
g.drawImage(image, x, y, null);
}
}

定义一个集合

public ArrayList<jietu> list1 = new ArrayList<jietu>();

定义一个boolean型变量为falg,每次点截图按钮赋为true判断,if(falg)执行截图,截图后置反falg,判断,if(falg)执行拖动(拖动即用鼠标拖拽事件获取坐标,在画image的时候执行g.drawImage(image,x,y,null))拖动后,如果点击屏幕(鼠标点击事件)置反falg,创建一个

if (flag) {
try {
Robot robot1 = new Robot();
if (a1 != a2) {
Rectangle r = new Rectangle(Math.min(a1, a2), Math.min(b1, b2), Math.abs(a1 - a2),
Math.abs(b1 - b2));


imag = robot1.createScreenCapture(r);
}
} catch (AWTException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
Fill fil = new Fill(a1 - 88, a2 - 88, b1 - 30, b2 - 30, cx, Color.WHITE);//在截图处画白矩形,达到截图的效果
list.add(fil);
flag = !flag;
}

if(!falg)执行拖动(拖动即用鼠标拖拽事件获取坐标,在画image的时候执行g.drawImage(image,x,y,null))

if (!flag) {
x = e.getX();
y = e.getY();


}

若flag不为true画出拖动的截图

                            if (!flag) {
g.drawImage(imag, imax, imay, null);


}


拖动后,如果点击屏幕(鼠标点击事件)置反falg,创建一个Jietu对象,加入到集合list1.

if (!flag) {
jietu jt = new jietu(imag, x1, y1);//在鼠标点击事件里//x1,y1为拖拽后从鼠标松开事件获取的动解图后的坐标
list1.add(jt);
}


可以截下张图

操作循环







画出截到的图代码如下


public void paint(Graphics g) {


super.paint(g);


if (!flag) {
g.drawImage(imag, imax, imay, null);


}
for (int j = 0; j < list1.size(); j++) {
jietu jt = list1.get(j);
jt.draw(g);
}


因为鼠标点击事件不受任何鼠标事件的影响,所以把flag的置反放在鼠标点击事件,截图后flag置反了,所以下一次就不能继续截图,而可以拖拽截图,点击屏幕后,flag置反,可以继续截图,不能拖拽截图,需截图后置反才能拖拽


第一次写,说的比较含糊。



0 0
原创粉丝点击