简单图像浏览器的设计与实现(实验版)PPT教学课件
- 格式:ppt
- 大小:203.00 KB
- 文档页数:16
浙江工商大学计算机与信息工程学院课程设计报告课程名称:面向对象程序设计专业:计算机科学与技术班级:计科0902 ______学号: 0912300219 _姓名:徐雪琳题目:图像浏览器的设计与实现指导教师:刘春晓2011年1月计算机与信息工程学院2009级《面向对象程序设计》课程设计任务书设计说明书一、问题描述图像浏览器的设计与实现:设计一个能实现图像浏览与编辑功能的Java/C++程序,包括如下功能:1)从已有的图像文件列表中选择某一个,即可显示该图像,并可做旋转等变换。
2)在画布区域上可以进行各种规则图形的绘制(如:线段、矩形、多边形、圆等),还可通过鼠标的拖动自由绘图。
3)可以连续播放所选文件夹下的所有图像。
二、需求分析随着数字产品渐进人们的生活,网络通信技术、图像处理技术以及多媒体技术的发展,越来越多的用户希望能够对已有的数字图片进行查看并能够实现简单的操作。
此图片游览器以C++ Windows编程及OpenCV 为基础,在MFC 的单文档上实现,面向对象的设计及其简洁明了易操作的特点实现图片查看的基本功能,从而也就满足了用户对图片查看的基本要求。
(1)MFC:MFC是用来编写Windows应用程序的C++类集,该类集以层次结构组织起来,其中封装了大部分Windows控件,它所包含的功能涉及到整个Windows操作系统。
MFC不仅为用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件。
应用MFC类库和Visual C++提供的高度可视的应用程序开发工具,可使应用程序开发变得更简单,开发周期极大地缩短,提高代码的可靠性和可重用性。
创建一个名为ImageViewer的MFC单文档程序,步骤为首先在新建工程框中选择MFC AppWizard(exe),工程名为ImageViewer,点下一步后选择基于单个文档的程序,其余的基本选择默认,除了最后选择基类是不是默认的CView而选择CScrollView类,因为在显示图片时可能会出现图片大小比视窗大小还要大,这是就要用到滚动条,所以选择了这个基类。
目录《程序设计语言(VB)》课程设计一、设计目的1、进一步掌握程序的三大基本结构;2、进一步掌握算法设计;3、进一步理解程序调试;4、综合利用上述知识,学习设计并编写简单应用程序;5、培养学生团结协作的能力;二、环境配置要求硬件配置:586以上PC兼容机或品牌机,配有彩色显示器、鼠标、键盘,内存不小于64MB,硬盘自由空间不少于200MB。
推荐配置为内存128MB或256MB(或以上),硬盘自由空间500MB以上。
操作系统:Windows2000/NT/Xp、VB集成开发环境。
三、设计题目图片浏览器(一)系统的主要功能⑴程序启动后,单击“指定文件夹”按钮,弹出“指定文件夹”对话框,从中选择计算机中某个有图片的文件夹。
单击“确定”后,程序自动搜索指定文件夹中扩展名为.jpg、.bmp、.ico、.cur和.gif的图片文件,讲图片文件名显示在主窗口左边的列表框中,并将当前的图片文件夹名显示在主窗口的底部。
⑵指定了图片文件夹之后,程序在主窗口右部的显示区显示第一幅图片。
这时,使用鼠标单击列表中的文件名、使用键盘上的方向键、使用工具栏上的“前一幅图片”和“下一幅图片”按钮都可以显示不同的图片。
使用“第一幅图片”和“最后一幅图片”可以显示列表中的第一副和最后一幅图片。
浏览图片时,窗口左下角显示图片总数以及当前显示图片的序号。
⑶单击工具栏上的“自动播放”按钮,程序自动以每秒一幅的速度以幻灯片形式循环显示所有图片。
在自动播放时,鼠标、键盘和工具栏上的其他按钮仍可以正常使用。
自动播放时,“自动播放”按钮变为,单击停止自动播放。
单击“退出”按钮关闭本程序。
⑷为了最大限度地使用屏幕的显示能力,要求程序主窗口可以通过拖动边框、单击“最大化”、“最小化”和“还原”按钮来改变其大小。
主窗口改变大小时,上面所有的控件都应调整其大小与位置来保证正常的显示效果。
(5)工具栏上的按钮根据程序的运行状态自动变为有效或无效。
例如,在程序未指定文件夹时,中间五个按钮全为无效灰色状态,;如果显示的是最后一幅图片,则“下一幅图片”和“最后一幅图片”按钮应为无效。
洛阳理工学院手机软件开发实训报告专业计算机应用技术班级 Z120551学号 Z12055139姓完成日期 2014-1-6一、简介本款图片浏览器软件基于Android系统平台研发的,设计有透明度、缩放、旋转和选择图片等功能,其中设计涉及8个button按钮,可以实现图片的查看和基本的操作功能,框架结构ImageView有两个子类ImageButton 和QuickContactBadge, ImageButton还有一个子类是 ZoomButton。
二、程序模块划分1.XML文件属性调整边界, 保持长宽比 :android:adjustViewBounds, setAdjustViewBoun ds(boolean), 是否调整自己的边界, 用来保持图片的长宽比例, 该属性与 andr oid:maxHeight 和 android:maxWidth 属性一起使用才有效果, 单独使用没有效果; 设置最大宽, 高 :android:maxWidth(android:maxHeight),setMaxWidth(i nt)[setMaxHeight(int)], 该属性需要与android:adjustViewBounds属性一起使用,单独使用无效果;设置图片固定大小, 同时保持长宽比 : a. 设置android:adjustViewBound s 为 true; b. 设置最大宽度, 高度; c. 设置android:layout_width 与 andro id:layout_height 值为 warp_content; 裁剪保留空白 :android:cropToPaddin g, setCropToPadding(boolean), 是否裁剪, 用来保留ImageView的padding, 该属性与android:scrollY 属性一起使用的时候才有用, 单独使用没有效果; 即在滚动的时候, 滚动到边界, 边界的padding空白是否显示;填充方式 :android:scaleType, setScaleType(ImageView.ScaleType), 设置图片缩放类型以适配ImageView大小, 即填充方式;可能的取值 : matrix, fitXY, fitStart, fitCenter, fitEnd, center, centerCrop, centerInside;matrix : 方法中的常量值为 ImageView.ScaleType.MATRIX, 使用矩阵来进行绘图;fitXY : 方法中的常量值为 ImageView.ScaleType.FIT_XY, 在x y 两个方向上缩放, 使图片完全填充整个ImageView 不按照长宽比例缩放;fitStart : 方法中的常量值为 ImageView.ScaleType.FIT_START, 保持长宽比缩放, 直到该图片完全显示在ImageView中, 缩放完成之后该图片在左上角;fitCenter : 方法中的常量值为 ImageView.ScaleType.FIT_CENTER, 保持长宽比缩放, 直到该图片完全显示在ImageView中, 缩放完成之后该图片位于中央;fitEnd : 方法中的常量值为 ImageView.ScaleType.FIT_END, 保持长宽比缩放, 直到该图片完全显示在ImageView中, 缩放完成之后该图片位于右下角;center : 方法中的常量值为 ImageView.ScaleType.CENTER, 将图片放在ImageView的中央, 不进行缩放;centerCrop : 方法中的常量值为 ImageView.ScaleType.CENTER_CROP, 保持长宽比缩放, 使图片完全覆盖ImageView;centerInside : 方法中的常量值为 ImageView.ScaleType.CENTER_INSIDE, 保持长宽比缩放, 是的ImageView完全显示图片;(1)程序运行的AndroidManifest描述:【AndroidManifest.xml】<?xml version="1.0"encoding="utf-8"?><manifest xmlns:android="schemas.android./apk/res/android"package=".lyc.pic"android:versionCode="1"android:versionName="1.0"><application android:icon="drawable/icon"android:label="string/app_name"><activity android:name=".MianActivity"android:label="string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><categoryandroid:name="UNCHER"/></intent-filter></activity><uses-sdk android:minSdkVersion="8"/></application></manifest>(2)程序界面布局XML文件 : 【activity_main.xml】<LinearLayout xmlns:android="schemas.android./apk/res/android"xmlns:tools="schemas.android./tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="drawable/bg_im"android:orientation="vertical"><LinearLayoutandroid:orientation="horizontal"android:layout_height="wrap_content"android:layout_width="fill_parent"android:padding="5dp"android:gravity="center"><Buttonandroid:id="+id/alpha_plus"android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"android:text="透明度+"android:background="drawable/bg_bt" android:onClick="onClick"/><Buttonandroid:id="+id/alpha_minus"android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"android:text="透明度-"android:background="drawable/bg_bt"android:onClick="onClick"/><Buttonandroid:id="+id/prev_page"android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"android:text="上一"android:background="drawable/bg_bt" android:onClick="onClick"/><Buttonandroid:id="+id/next_page"android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"android:text="下一"android:background="drawable/bg_bt" android:onClick="onClick"/></LinearLayout><LinearLayoutandroid:orientation="horizontal"android:layout_height="wrap_content"android:layout_width="fill_parent"android:padding="5dp"android:gravity="center"><Buttonandroid:id="+id/big"android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"android:text="放大"android:background="drawable/bg_bt" android:onClick="onClick"/><Buttonandroid:id="+id/small"android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"android:text="缩小"android:background="drawable/bg_bt" android:onClick="onClick"/><Buttonandroid:id="+id/turn_left"android:layout_height="fill_parent" android:layout_width="fill_parent"android:layout_weight="1"android:text="左转"android:background="drawable/bg_bt"android:onClick="onClick"/><Buttonandroid:id="+id/turn_right"android:layout_height="fill_parent"android:layout_width="fill_parent"android:layout_weight="1"android:text="右转"android:background="drawable/bg_bt"android:onClick="onClick"/></LinearLayout><ImageViewandroid:id="+id/image_all"android:layout_width="fill_parent"android:layout_height="fill_parent"android:scaleType="fitCenter"android:src="drawable/mary1"/></LinearLayout>2.ImageView常用方法设置位图 : setImageBitmap(bitmap), 为ImageView设置Bitmap位图显示;设置Drawable : setImageDrawable(drawable), 为ImageView设置Drawable显示;设置资源 : setImageResource(int), 为ImageView设置资源图片;设置路径 : setImageUri(uri), 为ImageView设置图片路径, 显示该路径的图片;3. 图片浏览器操作介绍(1). 实现左右循环切换图片图片数组 : 将图片放在数组中, ImageView显示数组中的图片;当前显示图片下标索引 : 设置一个int值, 用来表示当前显示图片数组中的图片, 这个值不是int下标, 这个值设置很大设置成Integer.MAXVALUE / 2, 该值与图片数组的长度进行取模运算结果就是当前显示的图片数组下标值;翻页操作 : 上一页操作就将当前显示索引自减1, 然后模上图片数组大小; 下一页就将当前索引自增1, 然后模上图片数组大小;代码如下 :/设置一个很大的值, 保证前后翻页不会出现异常currentImage = Integer.MAX_VALUE / 2;//为了保证图片能够循环, 这里模运算是关键, 显示图片的下标始终是长度的模image_all.setImageResource(images[ ++currentImage % images.length ]); image_all.setImageResource(images[ --currentImage % images.length ]);(2). 透明度改变设置当前透明度 : 设置一个当前透明度值, 初始值为255, 255是不透明, 0为完全透明;透明度改变 : 当点击透明度增加按钮的时候, 透明度自增20, 如果结果透明度大于255, 那么改透明度强制设置为255; 当点击透明度见效按钮的时候, 透明度自减20, 当透明度小于0的时候, 透明度强制设置为0;代码如下 ://透明度初始值alpha = 255;//透明度增加alpha += 20;if(alpha >= 255)alpha = 255;image_all.setAlpha(alpha);//透明度减小alpha -= 20;if(alpha <= 0)alpha = 0;image_all.setAlpha(alpha);(3). 图片的放大缩小获取View组件宽高 : 在Activity普通方法中无法获取到view组件的准确值, 如果想要获取view组件的宽高, 可以在 onWindowFocusChanged()方法中获取;计算每次自增自减的单位值 : 当按下缩放按钮的时候, 就对ImageView的宽高值进行自增自减单位值操作;为ImageView设置宽高 : 即设置LayoutParams, 注意是yo utParams对象;代码如下 :获取宽高 :Overridepublic void onWindowFocusChanged(boolean hasFocus) {// TODO Auto-generated method stubsuper.onWindowFocusChanged(hasFocus);//获取ImageView组件的宽高imageWidth = image_all.getWidth();imageHeight = image_all.getHeight();//计算每次自增自减的值addWidth = imageWidth / 5;addHeight = imageHeight / 5;}缩放图片操作 :case R.id.big: //放大图片imageWidth += addWidth;imageHeight += addHeight;image_all.setLayoutParams(new youtParams(imageWidth , imageHeight));break;case R.id.small: //缩小图片imageWidth -= addWidth;imageHeight -= addHeight;if(imageWidth <= 0 || imageHeight <=0){imageWidth += addWidth;imageHeight += addHeight;}image_all.setLayoutParams(new youtParams(imageWidth , imageHeight));break;(4). 旋转图片操作设置Matrix对象 : 该对象用来存放图像的旋转角度;设置旋转角度 : matrix.setRotate(), 即可设置旋转角度;创建Bitmap : 创建一个位图, 注意将设置了旋转角度的 matrix 设置上去; 源码如下 :matrix = new Matrix();//向左旋转进行的操作anglel += 45;matrix.setRotate(anglel);Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(images[cu rrentImage % images.length])).getBitmap();bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),bitmap.ge tHeight(), matrix, true);image_all.setImageBitmap(bitmap);//向右旋转进行的操作anglel -= 45;matrix.setRotate(anglel);Bitmap bitmap1 = ((BitmapDrawable) getResources().getDrawable(images[c urrentImage % images.length])).getBitmap();bitmap1 = Bitmap.createBitmap(bitmap1, 0, 0, bitmap1.getWidth(),bitmap 1.getHeight(), matrix, true);image_all.setImageBitmap(bitmap1);运行结果:心得体会:通过本次生产实习受益匪浅,知道了一个项目的完成步骤和模块的划分,在本次生产实习中遇到的困难是有以下几点:(1)对android软件开发知识掌握的不够,把代码敲出来功能实现了但是还是不知道怎样实现的;(2)对开发软件的过程不是很熟悉一个功能实现了不知道下一步要干什么;(3)对eclipse的调试方法知道的不是很多,所以遇到问题自己却束手无策只能求助,最终在网络和好友的帮助下实现了老师要求的功能。
实验一制作图片浏览器一实验目的:学习并掌握Visual Basic基本控件的使用,学习并掌握Visual Basic6.0的基本语法规则,理解并掌握容器的概念,掌握面向对象编程的基本原理与方法。
二实验内容:利用PicturBoxe、Image控件结合文件系统空间制作支持多种静态图片文件格式的浏览器。
三实验原理:Visual Basic6.0支持几乎全部的图片格式,包括BMP,JPG GIF ,CUR,ICO等格式,通过文件系统控件可以访问到全部本地磁盘、软盘、光盘、移动存储设备以及局域网内用油访问权限的逻辑磁盘上的文件,通过利用FileListBox 控件的文件过滤功能,将可显示的图片罗列出来后在Image控件中进行显示。
PictureBox控件是一款用来加载和处理图片的控件,它不仅仅可以用来显示图片,而且可以加载上面的图片进行更高级的编辑,如按位操作、像素级图像处理等,PictureBox拥有独立的坐标系统,可作为容器来加载其他控件。
Image控件是一款专门用来显示图片的控件,它可以显示全部图像格式,同时由于具备Stretch属性,可以使图像按照Image控件的二维视图区域进行显示,又由于该控件占用的内存空间比PictureBox控件小得多,因此在不对图像进行处理的场合下应优先选择。
加载图像使用VB自带的LoadPicture函数,它的引用方法为:Picture1.picture=LoadPicture (Pathname)Image1.picture= LoadPicture (Pathname)其中Picture1为图片框控件PictureBox的对象引用名称,Image1为图像框控件Image的对象引用名称。
Pathname为图片文件的路径。
由于本实验仅仅涉及图片的浏览,因此建议使用Image控件。
同时,显示过程中为了保证图像显示的完整性,应该使Image控件的大小符合图片自身的大小,在支持缩放时,图片的高和宽两项参数应该按比例同时发生变化。
黔南师院计科系实验报告《易木图片浏览器》——《Java程序设计》课程设计报告系别: 计算机科学系班级: B11计科班学生姓名:林元兵学生学号: 1108075150指导教师:罗刚设计日期: 2013 年 6月一、课程设计目的:1、复习、巩固Java语言的基础知识,进一步加深对Java的理解和掌握;2、将学习Java中的抽象概念与实际动手编程相结合,锻炼学生的分析解决实际问题的能力,培养正确的编程习惯和能力;3、培养学生自主学习能力、创新意识和创新能力。
二、课程设计要求:1、首先要对课程设计题目进行前期分析,规划好所要制作的类、需要实现的功能、需要编写哪些类来实现、类和类之间有什么关系(请对这部分内容进行简单叙述、可以使用UML图);2、完成的程序要进行相应的的测试,功能要完整,设计要合理,对测试出现的问题进行适当处理,使程序能正确运行;3、设计报告的写法要求:对本次设计/编程的大体思路进行文字描述,并摘抄关键语句;使用GUI编程的,将主要代表界面进行截图放于文档中,没有使用GUI编程的请画出类图,流程图等说明;对本次Java的学习和课程设计进行总结。
4、提交方式:设计报告文档电子版和源程序,统一交到班长或者学习委员处。
5、提交时间: 6月28日。
目录一、项目运行系统要求二、项目功能分析三、项目文件(类)说明3.1、PictureView类3.2、PictureViewWin类3.2.1、PictureViewWin()方法3.2.2、createTop()方法3.2.3、createCenter()方法3.24、createBottom()方法3.24、reSiziPicture()方法3.2.5、actionPerformed()方法3.3.6、run()方法3.3、ReName(内部类)3.4、musicPlay类3.4.1、musicPlay()方法3.4.2、actionPerformed()方法3.5、SettingWin类3.6、Help类四、项目演示五、总结一、项目运行系统要求在运行该程序前,必须先安装JDK,在源文件的的根目录下有jdk-6u16-windows-i586.exe文件,该文件为jdk1.6版本,安装好该文件后即可运行该程序。