疯狂java实战演义-第6章-仿Windows画图.doc

疯狂java实战演义-第6章-仿Windows画图.doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第6章仿Windows画图

6.1画图软件概述

我们平时所使用的图形处理工具有PhotoShop、Windows画图工具等,其中PhotoShop是一款非常强大的图形处理工具,Windows画图工具那么是一款较为简单的画图工具,功能较为简单,相信经常使用Windows系统的读者都比拟熟悉,是一种比拟简单与具有代表性的画图工具,虽然功能不够强大,但具有大多图片处理程序所必需的根本功能:铅笔画图、各种数学函数图形、填色、取色、橡皮擦等等功能。

本文将使用Java语言去实现Windows的大局部功能,包括取色、各种数学函数图形、橡皮擦、喷枪、颜色编辑等功能,除了这些绘图功能,还会实现翻开图片、保存图片等文件操作功能。画图工具的最终效果如图6.1所示。

图6.1画图

6.2画图工具原理

我们可以考虑一下如何使用Java程序去实现这些功能,如果需要进行画图,那么我们当然就需要Graphics类来向界面画上相应的内容,如果需要进行文件操作,我们可以使用Java的IO来实现。

6.2.1

在Graphics中许多方法,其中有一个drawLine的方法,使用该方法我们可以将线画到界面中,该方法中有四个参数,分别是线的开始点坐标〔x、y〕与线的结束点的坐标〔x、y〕,因此,如果需要调用该方法来画线的话,需要捕获用户在界面中按下鼠标的点坐标与放开鼠标时的点坐标。当调用了drawLine方法后,我们再对界面的组件进行一次repaint就可以实现画线的功能。

6.2.2其他画图

画线我们可以调用drawLine方法,那么画椭圆的话可以调用Graphics类的drawOval方法,如果需要画矩形的话,可以调用drawRect方法。如果需要实现橡皮擦的功能,可以将鼠标经过的区域画上白色的线。实现喷涂的功能,可以在当前鼠标点击的区域中画上相应的点,Graphics类中提供了一个fillRect的方法,我们可以利用该方法去填充当前的区域。除这些画图功能外,我们还需要提供一个刷子的功能,刷子功能可以看作是一个画笔功能,只是使用刷子画出来的线比画笔更粗而已。

6.2.3

我们可以在画图的界面中保存一个BufferedImage的对象,那么可以通过这个对象得到一个Graphics对象,得到该对象,就可以使用它的drawXXX的方法来进行画图,到最终需要进行保存的时候,我们可以将这个BufferedImage对象通过ImageIO的writer方法写到文件中。

只要知道使用Java程序来实现画图的原理,实现程序就十分的简单,关键是如何计算各个工具的有效范围。

6.3创立画图工具的各个对象

使用Windows的画图软件,发现在编辑图片的时候,有个相似的过程,首先是用鼠标选择需要使用的工具,然后就在画板中用鼠标进行拖动、点击等动作,画板会显示出相应工具的所产生的效果,所以在这里设计一个命名为Tool的接口,这个接口是所有工具的接口,里面定义了一系列的鼠标动作。实际上在这个画图工具中,所有的工具都必须遵守一定的标准,即使用鼠标进行拖动、点击等动作,当需要定义某些标准的时候,我们可以将这些标准写到一个接口中,那么这个接口所有的实现类都要遵守这个标准,这也是本章将工具作为一个接口的原因。

在本章中,画图软件的主界面使用ImageFrame,该类继承于JFrame,该类会初始化画图软件的各种组件。由于我们有选择翻开图片文件的操作,所以会有一个扩展类〔为选择文件提供一种简单的窗口选择机制〕的ImageFileChooser类,用于处理选择文件时的过滤等操作。

因为绘图的功能已经全部由Tool的实现类去实现,所以除了绘图外的其它功能的逻辑实现,就全部放到ImageService类中,本章中的类图如图6.2所示。

图6.2画图软件类图

6.

从图6.2中可以看到,工具接口Tool定义了鼠标动作的四个方法,分别是拖动mouseDrapped()、移动mouseMoved()、松开mouseReleased()、按下mousePressed()、点击mouseClicked()五个动作,并用String类型的常量属性来定义工具的类型。这个接口只有一个实现类AbstractTool,而每个工具类都是去扩展AbstractTool类,在图中表现为Tool1、Tool2…….ToolN。以下是此接口定义的属性与方法:

staticfinalStringARROW_TOOL,箭头工具类型。

staticfinalStringPENCIL_TOOL,铅笔工具类型。

staticfinalStringBRUSH_TOOL,刷子工具类型。

staticfinalStringCUT_TOOL,剪切工具类型。

staticfinalStringERASER_TOOL

文档评论(0)

寒傲似冰 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8071104010000026

1亿VIP精品文档

相关文档