再计算出水平方向每一步的递增量:(A-B) / 3=155 / 3 = 51.7这里我们用一个变量DRt来记录这个递增量(这里只用红色来做例子)ab1 = A + DRt = 100+51.7 =151ab2 = ab1 + DRt = 151+51.7 = 202
好了,其实二次线性算法就是这么一个东西,并不复杂。或许有写朋友会对于我给出的代码产生疑问。很简单的一个算法为什么要写这么多代码。
其实答案很简单:为了提高速度。
在VB中“+”和“-”永远是最快的,“*”要比“/”和“\”快。不论是什么类型的变量都是这样的。
下面再来分析一下我的程序。在我的程序中把两个方向的插值分解成了两个单独的部分。先把A BC D变成:A ab1...abN BC cd1...cdN D再变成A ab1...abN Bac1 ............. db1... ............ ...acN .............. bdNC cd1...cdN D这两个方向的插值算法完全相同
而Xratio 和Yratio 这两个变量则用来记录水平方向和垂直方向的放大倍率。所以这个过程也能够让图像缩放不按照原始的纵横比进行。好了,将这个模块和全局变量添加到上次建立的工程模块中。把按钮中的代码改成:sub command1_click()With picture1 .ScaleMode=3 .BorderStyle=0 DibGet .hdc ,0 , 0 , .scalewidth , .scaleheight ZoomImage , .scalewidth * 2 , .scaleheight * 2End Withpicture2.AutoRedraw=TrueDibPut picture2.hdcpicture2.refreshend sub图像是否已经放大到原来的两倍了呢?速度不算很慢吧?什么?很慢?先编译成EXE再运行吧。关于二次线性插值就说到这里了,下一次将说一些基本的滤镜效果:锐化、柔化、扩散、雕刻请大家继续关注
(这里只是说了我自己在写程序的时候用到的方法,存在很多的不足。并且因为在贴上来的时候作了部分修改,可能会存在部分错误,请各位高手不吝赐教,将您用到的更好的方法提供一下,我将不胜感激。)
上一页 [1] [2]
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18