§2.3.1 系统设计的主要内容
实现图片的读取和保存;
实现图片的基本处理功能:如亮度、对比度、RGB等;
实现图片的浏览功能:缩放、旋转;
实现多样化的滤镜;
实现基本的撤销重做以及图像的复制,粘贴等;
§2.3.2 系统设计的目标
不出现异常警告,尽量减少bug;
界面整洁美观;
软件小巧,不占用太多内存;
运行速度快;
效果算法实用,耐用;
达到普通用户处理数码相片的需求。
§2.4系统开发的环境和工具
操作系统:Microsoft Windows 2000 Professional
编程语言:Object Pascal面向对象语言
开发工具:
●程序编写和界面设计: Delphi 7.0软件开发平台,结合Billeniumeffect界面控件。
●其他:
帮助文件及开始动画制作:flash动画软件flashMX 2004。
软件图标制作:矢量图形工具 Adobe Illustrator CS。
第三章 系统详细设计与主要算法
§3.1系统的体系结构和功能设计
体系结构简介(具体展开描述在3.2):
※photo是调用所有窗体的单元,并且记录每个form窗体与其对应的unit单元名称;
※主窗体程序模块:负责主窗体form1的程序调用,存放了整个系统中主要的程序,以及对其他各个单元的调用程序。要打开form2和form3两个窗体需要先调用该模块的程序;
※效果参数程序模块:负责form2的程序调用,主要存放可通过Ttrackbar滑动工具条实现效果参数调节的程序代码;
※图像处理模块:存放几乎所有的图像算法程序,专门提供给其它单元随时调用;
※帮助模块负责form3窗体,显示帮助信息。
§3.2系统各个模块的设计思路及实现方法
3.2.1 主窗体程序模块
◆打开图片(用到的过程和函数):
procedure OpenPicture;用于打开文件的时候把非bmp的图片像素化为位图导入到image1的画布上。
function LoadPictureFromFile(const FileName: string): TBitmap;
用于像素化非位图图像的函数,在过程openpicture中被调用。
procedure SetPictureMiddle;用于图片打开成功后可以在画布上居中显示。
流程图如下:
◆保存图片及另存图片
(1)保存图片 (2)另存图片
◆图像撤销及重做
建立一个过程procedure undouse;用于在每次执行新操作的时候都把当前图像保存到image2~image5中去,并调整image2~image5的图像。
调整如下(将前者的bitmap位图,assign分配给后者):
image1->image4,image1->image2,image5->image3,image5->image4,image1->image5.
然后在每个新操作执行完的时候都要执行一次这个过程,以保证及时能更新要撤销的图像。
撤销
继续调整image2~image5的关系:
image1->image4,image3->image1,image1->image5.
重做
调整image2->image1
◆图像的复制、粘贴、剪切、清除
剪切:先将当前位图复制,然后将其每点转换为白色。再将剪切的图像信息转jpg保存,方便粘贴的时候调用。
◆位图变换:90度旋转,图像垂直翻转,水平翻转。
90度旋转:调用过程procedure Rotatepicture(Bitmap: TBitmap);该过程主要以创建内存流和创建指针,并将其进行指针转移,数据转移后,逐列逐点存入数组中来实现图像的90度翻转。
垂直翻转:通过scanline扫描,建立两个Tbitmap进行对称列之间的字节交换,从而完成垂直翻转。
水平翻转:原理和垂直翻转一样,不过它是通过对称行之间的字节交换来实现的。
◆图像的反色、两色及灰度处理
反色:通过scanline扫描,对位图的每个点进行逻辑非操作。
两色:先把像素点上的三个字节乘以分别乘以一个小数(它们分别是0.3,0.59,0.11,是根据YUV颜色空间,Y分量的物理含义就是亮度,它包含了灰度图的所有信息,只求Y的值就可以得到灰度图,Y=0.3*R+0.59*G+0.11*B),然后处理得到改点在0~255之间的一个值。分析该值,如果大于128就将它的值改变为255(黑色),如果小于128就改为0(白色)。
灰度:对图像每个点的RGB取平均值,并将平均值赋予取值点。
◆图像的缩放
通过设置image1的属性image1.AutoSize:=false;image1.Stretch:=true;然后就可以通过同时调整image1的宽、高来实现图像的缩放。
◆界面切换
在form窗体中拖放多个TbsStoredSkin控件,分别载入指定目录下编辑好的界面文件skin.ini,然后改变bsSkinData1中的storeskin属性,使其指向特定的TbsStoredSkin,即可完成切换。
3.2.2 图像处理程序模块
全部靠效果参数程序模块和主窗体程序模块的调用实现效果。
◆图像的对比度、饱和度、亮度、RGB调节
对比度:为了达到理想的效果同时用了两个方法,一个方法用于控制变量值为正的时候(提高对比度),另一个方法控制变量值为负的时候(降低对比度)。
方法一:分别分析每个点的RGB值,大于128的就加上变量,小于的就减去变量(此时变量为正)。
方法二:变量的绝对值越大,图像就越接近RGB皆为127的灰色。如:针对某点的R值,取r=(R-127)*(变量 /255),然后再把r+R赋值给R,那么变量取值-255的时候,R=127。G和B也和R的