体系结构简介(具体展开描述在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的
首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5