如果你使用过Photoshop这样的图像处理工具,一定曾为它们各式各样的图形处理方式兴奋不已吧?不过话说回来,它也仅仅能处理单幅的静止图像。如果有一种方法能让你在自己编写的应用程序中加入类似Photoshop中的图像处理功能,而且是经过改进的动态特技处理手段,你会觉得怎么样呢?有兴趣的话就请继续往下看。
在介绍这些特技处理方法之前,让我们先做一些技术约定:用C Builder开发工具编写,应用ScanLine处理技术(可极大提升图像处理速度)。如果您用的不是C Builder开发工具也没关系,先看懂下面的处理方法后再将处理函数做一些修改,即可以应用到您喜欢的开发工具中去。
特技一、模糊淡出效果
也许您对淡入淡出效果较为熟悉,但对一边淡出一边模糊的效果一定感到新鲜吧!
首先分别谈谈淡出与模糊效果的原理。淡出函数的原理很简单,就是将每一像素点的R、G、B颜色值减去相同的整数直至零,这样即可实现整幅图的暗化。模糊函数相对要复杂一些,因为必须考虑周围像素的影响,这就要引入加权算法,按照给定的系数对周围像素点和当前点的颜色值进行加权运算。
下面让我们参考范例。在C Builder中创建新的工程(窗体保存为test.cpp),在Form中加入一个Image控件、一个Timer控件和一个Button控件。把Image控件的Autosize属性改为 True,Visible属性改为False,Align属性改为alClient,把Timer控件的Enable属性改为 False,Interval属性改为10,把Button控件的Caption属性改为“观看淡出模糊效果并且退出”,其他的都采用默认属性。
打开test.h头文件,在其中加入淡出函数和模糊函数的声明:
void softdowncolor(TImage *Bp,int step). //淡出函数
void softflt(TImage *Bp). //模糊函数
其中,淡出函数softdowncolor的step参数是在淡出时
减掉的颜色值,你可以通过它来控制淡出的速率。
接着,在test.cpp文件中加入淡出函数和模糊函数的实现:
void softdowncolor(TImage *Bp,int step)
{ BYTE *ptr.
int i,j.
int color.
Bp->Picture->Bitmap->PixelFormat=pf24bit.
for(i=0.iHeight.i ){
ptr=(BYTE *)Bp->Picture->Bitmap->ScanLine[i].
for(j=0.jWidth*3.j =3){
color=ptr[j 2].
color-=step.
if(color<0)color=0.
ptr[j 2]=color.
color=ptr[j 1].
color-=step.
if(color<0)color=0.
ptr[j 1]=color.
color=ptr[j].
color-=step.
if(color<0)color=0.
ptr[j]=color.
}
}
}
void softflt(TImage *Bp)
{ int Div=100.
int temp[3].
int flt[9]={10,10,10,10,20,10,10,10,10}.
BYTE *ptr,*ptru,*ptrm,*ptrd.
int i,j,k,m.
Bp->Picture->Bitmap->PixelFormat=pf24bit.
for(k=1.k<(Bp->Picture->Bitmap->Height-1).k ){
ptr=(BYTE *)Bp->Picture->Bitmap->ScanLine[k].
ptrm=(BYTE *)Bp->Picture->Bitmap->ScanLine[k].
ptru=(BYTE *)Bp->Picture->Bitmap->ScanLine[k-1].
相关文章
从TColor对象中解析出红、绿、蓝的亮度
个性凸现的动画特技效果
关于文件复制的程序代码
关于捕获VCL没有处理的Windows消息
用C Builder写COM版的Helloworld
类似网络蚂蚁的悬浮窗体
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛