个性凸现的动画特技效果

文章作者 100test 发表时间 2007:09:06 12:48:01
来源 100Test.Com百考试题网


  如果你使用过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
类似网络蚂蚁的悬浮窗体
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛