[原创]利用橡皮条技术画图

原创 2004年09月01日 19:11:00

[原创]利用橡皮条技术画图

在进行有绘制图形功能的软件开发中都会面临橡皮条技术,所谓橡皮条技术就是在绘制过程中出现鼠标移动的记录,当鼠标松开时绘制完整的图形。下面给出一个简单的橡皮条技术的应用,该应用是在APPLET上绘制一个矩形,并且只能绘制一个矩形,这对于图象裁剪很有帮助:

/**
 * @(#) xortest.java
 *
 * Copyright 2004 Opensource Develop Team. All rights reserved.
 */
import java.applet.Applet;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

/**
 * 在APPLET上绘制一个矩形,当要进行第二次绘制时,上次绘制的矩形消失。
 * @author ODT
 * @see java.applet.Applet
 * @since JDK 1.3
 * @version 1.0 07/05/2004
 */
public class xortest extends Applet
{
     Point pressed, last; // 记录图形起点和鼠标不停移动时终点坐标
     boolean firstRect; // 只画一个矩形

     public void init()
     {
           addMouseListener(new MouseAdapter()
           {
                 public void mousePressed(MouseEvent e)
                 {
                       firstRect = true; // 确保一个矩形
                       pressed = e.getPoint(); // 获得起点坐标
                 }

                 public void mouseReleased(MouseEvent e)
                 {
                       if (pressed != null)
                       {
                             Point released = e.getPoint();
                             Rectangle clip = new Rectangle(); // clip为最终确定的矩形
                             Graphics g = getGraphics();
                             Dimension size = getSize();

                             try
                             {
                                   clip.x = pressed.x;
                                   clip.y = pressed.y;
                                   clip.width = Math.abs(released.x - pressed.x);
                                   clip.height = Math.abs(released.y - pressed.y);

                                   g.clearRect(0, 0, size.width, size.height);
                                   g.drawRect(clip.x,  clip.y, clip.width, clip.height); // 画最后的矩形
                             }
                             finally
                             {
                                   g.dispose();
                             }
                       }
                 }

                 public void mouseClicked(MouseEvent e)
                 {
                       repaint();
                 }
           });

           addMouseMotionListener(new MouseMotionAdapter()
           {
                 public void mouseDragged(MouseEvent e)
                 {
                       Point loc = e.getPoint(); // 鼠标当前位置
                       Graphics g = getGraphics();

                       try
                       {
                             g.setXORMode(getBackground()); // 设置绘图模式为XOR,橡皮条颜色为背景灰色
                             if (firstRect)
                             {
                                   firstRect = false; // 如果有矩形的画则设置为FALSE
                             }
                             else
                             {
                                   g.drawRect(pressed.x,  pressed.y,
                                           Math.abs(pressed.x - last.x),
                                           Math.abs(pressed.y - last.y));
                             }
                             g.drawRect(pressed.x,  pressed.y,
                                     Math.abs(loc.x - pressed.x),
                                     Math.abs(loc.y - pressed.y));
                             last = e.getPoint();
                       }
                       finally
                       {
                             g.dispose();
                       }
                 }
           });
     }
}

【VC6.0】直线的橡皮筋绘图技术

在我们在使用微软的绘图程序时。当要画一条直线,先用鼠标确定起始位置,然后鼠标在屏幕上来回移动时,我们会发现,这条直线就像橡皮筋一样,随着鼠标在屏幕中的位置,长短和终点都随之变化。我们在编制自己的程序时...
  • lilian_lilith
  • lilian_lilith
  • 2014年07月17日 10:47
  • 732

MFC对话框中绘制橡皮筋矩形

李国帅于 2009-03-09 10:28在OnLButtonUp中用CDC::BitBlt 放大选择图形,注意要先清除原图。另外要在OnMouseMove应该先判断一下鼠标是否按下后,再开始矩形虚框...
  • lgs790709
  • lgs790709
  • 2017年12月26日 12:24
  • 36

OpenGL学习笔记:(三)异或操作-橡皮条程序

一、异或操作 1.复制模式(GL_COPY) 1.1. 复制模式为Opengl默认的逻辑运算模式 2.1.画线的时候,如果采用复制模式,则是用当前状态机中的颜色像素替换窗口里相应位置的像素。...
  • sinat_20530977
  • sinat_20530977
  • 2015年04月02日 19:07
  • 1336

在MFC中,利用GDI绘制橡皮筋效果-直线,圆,椭圆,矩形

在MFC中利用GDI实现橡皮筋效果绘制直线、圆、椭圆、矩形
  • xingkongtianyuzhao
  • xingkongtianyuzhao
  • 2015年09月14日 10:48
  • 2202

Skyline 代码实现画线操作_橡皮筋效果

在skyline中没有交互式的画线方法,下面的代码完成了一个简单的画线操作逻辑。 在左键下压事件中绑定画线方法,在获取鼠标坐标后增加线的节点来完成画线操作。...
  • Iwangliyu
  • Iwangliyu
  • 2014年04月24日 19:32
  • 2614

双缓冲技术绘图

之前在做图形绘制的时候,发现在拖动图形时候,会出现闪烁的情况,后来就上网找了一下shuanghuan...
  • a345203172
  • a345203172
  • 2014年04月09日 14:52
  • 3922

php中的绘图技术

在php中,使用php绘图,在访问php文件时可以出现我们绘制的图像。php绘图技术可以应用于报表的开发、验证码的设计。        在介绍php绘图技术之前,我们首先需要了解一下php中的绘图坐标...
  • qq_15096707
  • qq_15096707
  • 2015年10月05日 23:11
  • 1959

千橡技术基础测试

1. 小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一天3月1日 3月5日6月4日 6月7号9月4日 9月5号 9月8日12月1日 12月2日 12月8日张...
  • fengyie007
  • fengyie007
  • 2013年12月27日 19:51
  • 484

手把手教你玩转QQ的原创表情

QQ的原创表情非常的可爱,做得比较精致,深受广大QQ用户的喜爱;但怎么将这些表情保存下来,好让我可以在别的地方用呢? 乖乖牛在线将从不同的视角,为你解析QQ原创表情的存储、互通、保护的机制;熟悉了这些...
  • TragicGuy
  • TragicGuy
  • 2015年10月23日 13:58
  • 1099

基于C#的Skyline二次开发

项目介绍:        简单介绍一下,项目名称是XX流域高分航空影像获取与数字平台系统。导师接的横向项目,除了数据采集基本由我一个人完成(==)。所谓高分航空影像是最近比较火的无人机倾斜摄影建模,而...
  • DanteLzp
  • DanteLzp
  • 2017年03月03日 17:13
  • 2887
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[原创]利用橡皮条技术画图
举报原因:
原因补充:

(最多只允许输入30个字)