图片管理器报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java面向对象程序设计学期作业项目报告
题目图片管理器
组长崔利欢
组员赵志军
谌超尘
陈慧
施凤婷
系别软件工程
学院软件学院
指导教师付伟讲师
2016年6月11日
目录
一、项目基本功能陈述 (2)
二、项目进度及工作安排 (4)
1、工作安排 (4)
2、项目进度 (5)
三、项目相关技术 (7)
1、图片在面板中居中算法 (7)
2、浏览图片时放大与缩小的算法 (8)
3、图片的上下张的算法 (9)
4、播放工具栏可以隐藏算法 (9)
5、键盘与鼠标交替使用算法 (10)
6、图片编辑算法 (10)
7、编辑图片时图片的缩放算法 (11)
四、项目设计 (12)
1、图片浏览功能 (12)
2、图片编辑功能 (13)
五、项目实现 (14)
1、图片查看器首页 (14)
2、图片查看功能页面 (15)
3、图片编辑功能页面 (18)
六、总结与展望 (21)
一、项目基本功能陈述
本项目是一款关于图片管理器的应用软件,如图1.1所示,功能包括图片查看与图片编辑两大主要功能。

如图1.2所示,图片查看包括以幻灯片形式播放,图片
删除,图片上一张,图片下一张,图片放大,图片缩小等功能,如图1.3所示,图片编辑包括对图片的格式转化,图片锐化,图片马赛克,图片半透明效果,图片模糊效果,图片照亮,裁剪图片等功能。

图片管理器

片编

功能






图1.1
图片编辑功能












































图片打印功能放大镜功能
图1.2
图片浏览功能
图片放大



























图1.3
二、项目进度及工作安排
1、工作安排
如表2.1.1所示,对全体小组人员进行项目安排。

表2.1.1
2、项目进度
如表2.2.1所示:
表2.2.1
三、项目相关技术
1、图片在面板中居中算法
因为图片的大小不一样,所以对图片居中的显示需要进行分类处理。

1)对于宽度与高度都比放置图片的面板小的,可以用屏幕的宽度(高度)减去图片的宽度(高度)再除以2,设置起始坐标位置。

2)对于宽度比面板小的,而高度比面板的高度高的图片,则图片放置的起始位置的横坐标与1)中的处理方式相同,而图片的纵坐标的位置设置为10个像素。

3)对于高度比面板小的,而宽度比面板的宽度宽的图片,则图片放置的起始位置的纵坐标与1)中的处理方式相同,而图片的横坐标的位置设置为10个像素。

4)对于宽度与高度都比放置图片的面板大的,则将图片的坐标设置为(10,10)。

代码如下:
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (pathString != null) {
image = new ImageIcon(pathString).getImage();
int a = image.getWidth(this) - this.getWidth();
int b = image.getHeight(this) - this.getHeight();
if(a > 0 && b > 0)
g.drawImage(image,10, 10, this.getWidth() - 10, this.getHeight() - 10, 0, 0, image.getWidth(this), image.getHeight(this), null);
else if (a > 0 && b < 0) {
g.drawImage(image,10, -b / 2, this.getWidth() - 10, image.getHeight(null) - b /
2 , 0, 0, image.getWidth(this), image.getHeight(this), null);
}
else if (a< 0 && b > 0) {
g.drawImage(image,-a / 2, 10,image.getWidth(null) - a / 2, this.getHeight() - 10, 0, 0, image.getWidth(this), image.getHeight(this), null);
}
else {
g.drawImage(image,-a / 2, -b / 2,image.getWidth(null) - a / 2, image.getHeight(null) - b / 2, 0, 0, image.getWidth(this), image.getHeight(this), null);
}
}
}
2、浏览图片时放大与缩小的算法
对于图片的缩放可以根据一个分式的分子与分母同时加上或减去原式的分子与分母的比例的倍数,则分式的大小不变的原理来进行缩放图片。

代码如下:
float proportion = (float) (jFrame.image.getWidth(null))
/ jFrame.image.getHeight(null);//获得宽与高的比例
jFrame.photoJpanel.setBounds(jFrame.photoJpanel.getX()
- (int) (5 * proportion), jFrame.photoJpanel.getY() - 5,
jFrame.photoJpanel.getWidth() + (int) (10 * proportion),
jFrame.photoJpanel.getHeight() + 10);//设置位置
3、图片的上下张的算法
先获得图片的路径,然后根据路径将本文件下的图片(通过文件过滤)的绝对路径全部加载到ArrayList的集合中,然后对集合进行操作。

4、播放工具栏可以隐藏算法
在全屏播放时,当鼠标移进相应的区域时,工具栏面板会及时显示出来。

一个JFrame 框架有许多面板层组成,最顶层的是玻璃面板,玻璃面板为不可见,透明的,把工具栏面板添加到玻璃面板中,并且将其设置成可见,透明的,就可以达到以上的效果。

代码如下:
fullToolJPanel = new FullToolJPanel();
JPanel glasspane = new JPanel();
setGlassPane(glasspane);
glasspane.add(fullToolJPanel);
glasspane.setLayout(null);
glasspane.setOpaque(false);
getGlassPane().setVisible(true);
5、键盘与鼠标交替使用算法
为了实现键盘与鼠标交替的使用,在这里需用将JFrame上的所有按钮都设置成不聚焦点,设置的方法是jbutton.setFocusable(false);
6、图片编辑算法
为了实现对图片进行编辑处理,我们使用了双缓冲技术,将image写到bufferImage 中,然后再对bufferImage中的图像进行处理,最后再将bufferImage中的图片写入到文件中。

代码如下(图片放大处理):
jFrame.photoJpanel.getHeight() + 10);//设置位置
BufferedImage buffImage1 = new BufferedImage(
jFrame.photoJpanel.getWidth(),
jFrame.photoJpanel.getHeight(),
BufferedImage.TYPE_3BYTE_BGR);//创建双缓冲对象
Graphics g2 = buffImage1.createGraphics(); //获得画笔
g2.drawImage(buffImage, 0, 0, jFrame.photoJ panel.getWidth(),//
jFrame.photoJpanel.getHeight(), 0, 0,
buffImage.getWidth(null),
buffImage.getHeight(null), null);//将图片绘到缓冲图片中g2.dispose();//销毁画笔
buffImage = buffImage1;//获得缓冲引用对象
7、编辑图片时图片的缩放算法
根据浏览图片进行缩放的算法,再创建一个缓冲图像,将其大小设置成要缩放后的图片,然后再把图片绘制到缓冲图像中。

float proportion = (float) (jFrame.image.getWidth(null))
/ jFrame.image.getHeight(null);//获得宽与高的比例jFrame.photoJpanel.setBounds(jFrame.photoJpanel.getX()
+ (int) (5 * proportion), jFrame.photoJpanel.getY() + 5,
jFrame.photoJpanel.getWidth() - (int) (10 * proportion),
jFrame.photoJpanel.getHeight() - 10);//设置位置
BufferedImage buffImage1 = new BufferedImage(
jFrame.photoJpanel.getWidth(),
jFrame.photoJpanel.getHeight(),
BufferedImage.TYPE_3BYTE_BGR);//创建双缓冲对象
Graphics g2 = buffImage1.createGraphics();//获得画笔
g2.drawImage(buffImage, 0, 0, jFrame.photoJpanel.getWidth(),
jFrame.photoJpanel.getHeight(), 0, 0,buffImage.getWidth(null), buffImage.getHeight(null), null);//将图片绘到缓冲图片中g2.dispose();//销毁画笔
四、项目设计
1、图片浏览功能
2、图片编辑功能
五、项目实现
如图5.1所示,点击图片查看器.exe,则可以直接进入软件。

图5.1
1、图片查看器首页
如图5.1.1所示,左边是目录导航,右边是预览窗口,预览窗口之上有编辑按钮,浏览按钮,以及桌面小程序的启动与关闭按钮。

当点击预览面板是就会弹出一个弹出菜单,可以对图片进行编辑处理。

图5.1.1
如图5.1.2所示,当点击启动按钮时,就会出现一个桌面时钟表。

图5.1.2
2、图片查看功能页面
若想对图片进行浏览,则可直接双击预览图片面板或者可以点击浏按钮也可以点击左键然后点击弹出菜单上的浏览选项,则可跳入浏览面板页面。

如图5.2.1所示:
图5.2.1
当鼠标移动到不同位置时,工具面板会相应地发生变化,如图5.2.2所示,当鼠标移动到下一张位置时,界面发生的变化。

图5.2.2
当点击工具面板上的幻灯片按钮或按Enter键时,就出现了如图5.2.3所示的页面。

在此页面中图片以一定时间间隔播放图片,这个时间间隔可以用户自己设置,用户可以暂停,也可以自己点击进行切换图片。

图5.2.3
若用户想要退出全屏浏览页面,可以直拉按Esc键或者可以点击屏幕上的关闭按钮,就会退到首页页面。

如图5.2.4所示:
图5.2.4
3、图片编辑功能页面
若想对图片进行编辑处理,则可直接点击编辑按钮也可以点击左键然后点击弹出菜单上的编辑菜单选项,则可跳入编辑面板页面。

如图5.3.1所示:
图5.3.1
图片编辑页面分为菜单栏和图片面板,菜单栏可以对图片进行一系列的编辑处理,如图5.3.2所示,图片特效菜单功能:
图5.3.2
当点击文件菜单,选择打开,则会弹出一个新的选择图片对话框,可以对图片进行重新选择,如图5.3.3所示:
图5.3.4
如图5.3.5所示图片裁剪功能:
图5.3.5
如图5.3.6所示图片锐化功能:
图5.3.6
六、总结与展望
通过将近一个月的项目中,使我们学到了很多东西,也让我们看到了自己的在一些知识上的不足,也将使我们在后面java web的学习中还要更加努力,以便将来找到自己适意的工作,在这次项目中我学到了很多东西,不只是代码上的知识,也学到了java 框架上的一些基本东西,还有层次结构的好处和由来,怎样实现封装使得更好的保护数据,实现java的三大特点,使代码的耦合度降低提高内聚力类和类之间的依赖性降低使模块和模块之间的层次分明,实现代码的复用和实现结构的复用使得开发一个系统的性能更加的优异。

在这次项目中使我对java面向对象的认识有了更深刻的印象,对“万物皆为对象“这个理念有更深层次的理解,通过和老师的交流和上网了解的一些知识,其实做软件的实质并不是在代码上实现什么样的功能,你只要愿意去用你所学的知识肯定能够实现某个功能,但学软件的最根本是分析和设计,所以现在市面上会设计的人才是最重要的人,在软件开发的生命周期中编码其实占很小一部分,数据库设计人员和java的框架技术人员是很受重视的,只有对对象有更多的了解,你才能从代码层次上升为另一种理念,过后你才能在后续的编码中设计出更加优异和性能更高的代码,也只有这样你将来才有可能成为一个合格的程序员,在这个项目的开发中使我们对团队开发软件有了了解,也使我们了解了在团队开发软件时的注意事项,不能随便更改类名、方法名、变量及其修饰符,如果你一时兴起改了的话,那么在项目融合的时候问题就会层出不穷,就
有可能使你的项目失败,所以规范是很重要的,代码的规范将很大层次上的说明你对代码的熟练度。

相关文档
最新文档