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

在进行有绘制图形功能的软件开发中都会面临橡皮条技术,所谓橡皮条技术就是在绘制过程中出现鼠标移动的记录,当鼠标松开时绘制完整的图形。下面给出一个简单的橡皮条技术的应用,该应用是在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();
                       }
                 }
           });
     }
}

[原创]利用橡皮条技术画图相关推荐

  1. 利用橡皮筋技术实现的画图

    相信大家第一次在VC中写画图程序的时候,总是会碰到一些问题把,尤其是画直线的时候,总是会出现一些扇形,而不是我们想要的具有动感的直线,我经过反复实践,终于找到了解决的办法,就是每次画新的直线时,都利用 ...

  2. 利用K8S技术栈打造个人私有云(连载之:K8S资源控制)

    [利用K8S技术栈打造个人私有云系列文章目录] 利用K8S技术栈打造个人私有云(连载之:初章) 利用K8S技术栈打造个人私有云(连载之:K8S集群搭建) 利用K8S技术栈打造个人私有云(连载之:K8S ...

  3. 利用反射技术修改类中的字段(成员变量的反射)

    题目:利用反射技术修改类中的字段及成员变量的反射 作者:Vashon 一.首先定义一个类如下: class ReflectPoint {private int x; //私有的public int y ...

  4. 【方案】去哪儿网徐磊:如何利用开源技术构建日处理130亿+的实时日志平台?...

    转自:http://mp.weixin.qq.com/s?__biz=MzIzMzEzODYwOA==&mid=2665284466&idx=1&sn=2b06a5298217 ...

  5. matlab labview 集成,利用COM技术的LabVIEW与MATLAB的无缝集成.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspLabview 利用COM技术的LabVIEW与MATLAB的无 ...

  6. 归一化激活层的进化:谷歌Quoc Le等人利用AutoML 技术发现新型ML模块

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 最近,谷歌大脑团队和 DeepMind 合作发布了一篇论文,利用 AutoML 技 ...

  7. 美国银行将 AI 应用于企业应收账款处理;联合国或将利用机器学习技术帮助救灾工作...

    8 月 24 日消息,据外媒报道,美国银行(Bank of America)与 Fintech 创业公司 High Radius达成合作,将人工智能应用于企业应收账款处理.该应用程序专为大型.复杂的公 ...

  8. 深度学习核心技术精讲100篇(二十七)-如何利用NLP技术对ASR的query文本进行预处理纠错?

    前言 语音系统中语音内容识别 ( ASR ) 的精准性,是影响智能语音产品发展的关键制约因素,用户query的文本,通常是由ASR系统将用户的语音命令转换而成,但由于技术上的原因,这些由ASR生成的文 ...

  9. 爬虫侵入计算机系统,【探讨】利用“爬虫技术”获取数据行为的刑事考量 ——以一起非法获取计算机信息系统数据案为例...

    在本案中最为主要的争议焦点是"公开的信息"是否属于非法获取计算机信息系统数据中的犯罪对象.非法获取计算机信息系统数据罪的保护法益是计算机信息系统安全和数据安全.那么信息是否等同于数 ...

最新文章

  1. MQTT数据处理之从tcp连接获取数据过程
  2. linux路由表命令
  3. 【转】Nginx服务器的反向代理proxy_pass配置方法讲解
  4. 【数据库】数据模型基础概念(图文版)
  5. dubbo原理_dubbo的底层原理
  6. 大龄打工者的出路在哪里
  7. 华为机试——整理数字字符串
  8. 我们团队有个做风水项目的现在月收入也有几万了
  9. JS+XMLDOM+XSL:实现中英文界面切换、排序、分页显示、增删改查XML文件数据源
  10. 正宗PC Unix实验环境
  11. 基本的阿里云Linux服务器设置
  12. 接收二进制数据_漫话TCP/IP:数据链路层-以太网(1)
  13. ROST情感分析的语法规则_基于「木兰」编译器,八行代码实现 quot;对于...中的quot;语法
  14. 【Python】基于Python的百度迁徙(2020年10月21日更)
  15. Emscripten 单词_英语48个音标与单词字母组合拼读发音教程
  16. MySQL笔记:第17章_其他数据库日志
  17. 【官方文档】Fluent Bit 安装在 Windows
  18. 如何转型社交新零售电商?转型社交新零售的核心关键是什么?
  19. php - 解决百万级全站用户消息推送问题
  20. opencv-python 详解阈值分割

热门文章

  1. WPF学习日记(一)——初步了解什么是WPF
  2. 运动规划问答 -路径规划
  3. ICCV21 Mutual Affine Network for Spatially Variant Kernel Estimation in Blind Image Super-Resolution
  4. CV | GauGan 论文学习:Semantic Image Synthesis with Spatially-Adaptive Normalization
  5. 农场游戏开发记录十五
  6. 中国量子计算机无花果,中国无花果产地有哪些?
  7. MMC 检测到此管理单元发生一个错误,建议你关闭并重新启动MMC
  8. 几种DOS下实用的MP3播放器的介绍http://lason.bokee.com/5967848.html
  9. 音频格式转换软件AudioTunes for Mac
  10. 【转】使用Midjourney绘制小漫画