个性凸现的动画特技效果
如果你用过Photoshop之类的图像处理工具,你一定对它们的各种图形处理方法感到兴奋。然而,它只能处理单一的静止图像。如果有一种方法可以在自己的应用程序中加入类似Photoshop中的图像处理功能,并且是一种改进的动态特技处理方法,你会怎么想?如果你感兴趣,请继续读下去。
在介绍这些特效处理方法之前,我们先做一些技术约定:用C++Builder开发工具编写,应用扫描线处理技术(可以大大提高图像处理速度)。如果你用的不是C++Builder开发工具,没关系。先了解以下处理方法再对处理函数做一些修改,可以应用到自己喜欢的开发工具上。
一种特殊效果,模糊淡出效果
也许你对淡入淡出的效果很熟悉,但是淡出的同时模糊的效果你一定觉得很新鲜!
先分别说说淡出和模糊效果的原理。淡出功能的原理很简单,就是将每个像素的R、G、B的颜色值减去同一个整数,直到零,这样就可以使整个图像变暗。模糊函数相对复杂,因为必须考虑周围像素的影响,所以引入了加权算法,按照给定的系数对周围像素和当前像素的颜色值进行加权。
让我们参考下面的例子。在C++Builder中新建一个项目(表单保存为test.cpp),在表单中添加一个图像控件、一个定时器控件和一个按钮控件。将Image控件的Autosize属性更改为True,将Visible属性更改为False,将Align属性更改为alClient,将Timer控件的Enable属性更改为False,将Interval属性更改为10,将Button控件的Caption属性更改为“观看淡出效果并退出”,所有其他属性都采用默认属性。
打开test.h头文件,在其中添加淡出函数和模糊函数的声明:
void softdowncolor(TImage *Bp,int step);//淡出功能
void soft FLT(ti mage * Bp);//模糊函数
其中淡出功能softdowncolor的步长参数是淡出时。
通过减去的颜色值,可以控制淡出速率。
接下来,在test.cpp文件中添加淡出函数和模糊函数的实现:
void soft down color(ti image * Bp,int step)
{ BYTE * ptr
int i,j;
int颜色;
Bp->图片->位图-> pixel format = pf 24 bit;
for(I = 0;ih height;i++){
ptr=(BYTE *)Bp->图片->位图-> ScanLine[I];
for(j = 0;jWidth * 3;j+=3){
color = ptr[j+2];
color-= step;
if(color ptr[j+2]= color;
color = ptr[j+1];
color-= step;
if(color ptr[j+1]= color;
color = ptr[j];
color-= step;
if(color ptr[j]= color;
}
}
}
void softflt(TImage *Bp)
{ int Div = 100
int temp[3];
int flt[9]={10,10,10,20,10,10,10,10,10 };
BYTE *ptr,*ptru,*ptrm,* ptrd
int i,j,k,m;
Bp->图片->位图-> pixel format = pf 24 bit;
for(k = 1;kPicture->位图->高度-1);k++){
ptr=(BYTE *)Bp->图片->位图->扫描线[k];
ptrm=(BYTE *)Bp->图片->位图->扫描线[k];
ptru=(BYTE *)Bp->图片->位图->扫描线[k-1];
位律师回复
0条评论