效果。可是矩阵的阶数越多越难实现,尤其还要变化成程序的格式,很容易出错。所以我打算主要从3阶的矩阵入手,研究一些简单易懂的算法。
在算法中,主要通过调整图像RGB之间的关系。或者是相邻点之间R或G或B的关系。由此就要了解三基色原理,还有在计算机中,0~255这个范围表示的颜色值。例如,当RGB都等于255的时候,颜色为黑色,都等于0的时候颜色为白色,由此也可以很方便的通过增减参数来调整图像的亮度,再根据三基色原理便可以通过单独增减R或G或B的值来调整图像的整体颜色,也可成为通道。
Delphi作为软件开发的一种工具,具有开发速度快,程序容易掌握,编译快,功能容易实现等特点。它所具有的强大控件组也是其他开发软件所没有的。它的强大功能,不但可以很容易地找到程序地出错点,还可以在短期内开发完成一个软件项目。它完成一个功能相对其他开发软件只需要少量的代码,且运行速度很快。除此之外,Delphi的界面还可以根据设计者的需要,通过编辑可以达到很漂亮的效果。
§1.2研究课题的任务、目的、意义
1.2.1课题的任务
实现图片的导入及保存;
实现图像的浏览:缩放与旋转;
实现图像亮度、对比度、饱和度等调节功能;
实现图像的滤镜效果;
1.2.2课题的目的
(1) 熟悉delphi软件开发平台,熟悉编程语言;
(2) 研究图像效果算法,将高等数学,线性代数等理论结合到编程实践中去,提高逻辑思维能力,和理论联系实际的实践能力;
(3) 真正系统地了解一个软件的整体开发过程;
1.2.3课题的意义
通过小型图像处理软件的编写,
首先,大大提高了编程水平以及逻辑思维能力;
其次,进一步熟悉了软件的制作流程及制作思路;
再次,进一步了解了相关图像处理软件的功能实现方法;
最后,为再次开发奠定了基础。
§1.3系统的主要功能与特色
1.3.1系统的主要功能
图像的打开及保存:支持jpg,bmp,ico,wmf,emf文件的导入及jpg,bmp,ico文件的保存。
图像编辑:图像的单步撤销和重做;整幅图的复制,剪切,粘贴,清除;
图像调整:位图变换(90度旋转,水平翻转,垂直翻转),取反色,取黑白两色,灰度图变换。可以用滑动工具条改变参数的有对比度,亮度,饱和度,RGB;
图像滤镜:曝光效果,浮雕效果。可以用滑动工具条改变参数的有锐化,模糊,添加杂色,喷溅效果,马赛克效果,霓虹效果;
在工具条一栏新增了放大缩小的效果:不会改变位图的实际大小,保存的时候以位图原先大小为准;
设置当前图像为壁纸:在鼠标右击图像显示的菜单中有该功能,可以设置图像为居中,平铺或者拉伸的效果。同时会保存名为WallPaperByDltjy的文件到该软件所存放的文件夹。
显示图片路径及实际宽和高:在软件最底端的工具栏会自动显示。
1.3.2系统的特色
采用Object Pascal面向对象语言,Delphi 7.0软件开发平台,并结合Billeniumeffect界面控件,具有运行速度快,操作简便容易上手,小巧精致,界面美观等特点。可以进行基本的图像处理,对不满意的数码照片进行颜色调节,或对比度调节等。
系统需求分析
§2.1本课题研究现状分析
随着计算机技术的日新月异,各种各样的图像处理软件也不断涌现于市场。比较知名的有adobe公司的photoshop,友立公司的我行我速,还有acdsee等等。其中最为畅销的当数功能强大的photoshop。该软件用到的图像处理算法被众多人所关注,并试图研究其研发思维和方法。于是接着出现了许许多多具有与其处理功能相类似的软件。现在的该类产品几乎都要满足普通用户的需求,界面要美观要整洁,功能还要易学易用。面对这么多形形色色的相关产品,想研发一个在市场上占有一席之地的实在很难。只能是从软件的小巧及实现基本的功能方面着手,先试着实现基本的一些处理效果。
§2.2要解决的技术难点及解决方法
图像的导入:导入图像的时候会出现闪烁的状况,这时候采用delphi的双缓冲功能来解决;要使得画布上的图像可以支持其他的效果编辑,必须将其先转换成位图bitmap,解决办法就是新建一个过程loadpicturefromfile,在该过程中,给出当导入的图片文件为某种类型的时候所对应的处理方案,例如bmp本来就是位图,那就可以直接导入,如果是jpg的就要建立一个Tjpgimage先导入该图像,然后对其进行像素化,转换为位图;
撤销及重做:本来想实现多步撤销及重复的功能,于是考虑到用双向链表,可是由于要考虑的问题太多了,当每执行一步新操作都要保存图像并且把图像地址保存到链表中,并记录其当前在链表中位置。执行撤销的时候又要调用链表中的指针及数据,结果就在链表中节点的新建和删除的时候出现了错误,由于时间不够,我对双向链表这方面筹集的资料还不够,所以只好暂时放弃多步撤销。现在采用的方法是通过再增加4个image,利用它们之间的位图数据调用来实现的,只能单步撤销及重做。
放大及缩小:刚开始的时候是通过改变位图的实际大小来实现缩放,后来发现这样不行,会丢失大量的图片数据,而且我设想的放大缩小应该是要保存的时候还保持和原先导入时一样的大小。上网筹集解决方案后终于得到解决办法:通过改变Timage的Stretch属性为真,AutoSize属性为假,然后在放大缩小的时候只要缩放它的宽和高的比例就可以了,这样又可以达到浏览的目的,又可以保证原图的实际大小不发生变化,更不会有图像数据丢失的问题。虽然编写出的程序没有多少行,可是方法却很关键。
附加的界面控件Billeniumeffect的使用:作为一个界面控件,它用它所有带bsskin前缀的控件代替了delphi中的可视控件,这样方便界面的编辑。可是,麻烦在于,该控件的用法并不是跟delphi原控件全都一样的,有的改变了属性,有的改变了用法。其中有用到的一个关键的控件就是scollbox滚动条,当图片大于画布最大尺寸的时候,就要用滚动条拖拉以显示其他未显示的尺寸。在delphi中只要直接拖用控件scollbox就可以解决问题。可是Billeniumeffect不同。后来借鉴了其他人做的关于Billeniumeffect控件使用的例子。原来不单要用到scollbox,而且还要拖用两个scollbar放在panel或groupbox上控制横向和竖向的拖动。
效果调整中的参数设置:每个算法都有其不同的参数设置问题,利用矩阵算法的尤其不好解决参数的调节问题。解决方法:多了解几种算法,采用容易调节参数及实现效果比较完美的算法。
效果的多样性研究问题:看到很多其他软件实现的效果,很漂亮,可是从效果猜想它的算法实在很难。解决方法:多参考图形学,图像处理算法等相关书籍,在编写程序的时候可以试着改变某算法的矩阵各个位置的值,或改变等式中的某个参数,也可以自己增加一个变量用以实现不同的效果。
§2.3系统设计的主
图像效果算法设计(二)相关范文