如果你使用過Photoshop這樣的圖像處理工具,一定曾為它們各式各樣的圖形處理方式興奮不已吧?不過話說回來,它也僅僅能處理單幅的靜止圖像。如果有一種方法能讓你在自己編寫的應(yīng)用程序中加入類似Photoshop中的圖像處理功能,而且是經(jīng)過改進(jìn)的動(dòng)態(tài)特技處理手段,你會(huì)覺得怎么樣呢?有興趣的話就請(qǐng)繼續(xù)往下看。
在介紹這些特技處理方法之前,讓我們先做一些技術(shù)約定:用C++Builder開發(fā)工具編寫,應(yīng)用ScanLine處理技術(shù)(可極大提升圖像處理速度)。如果您用的不是C++Builder開發(fā)工具也沒關(guān)系,先看懂下面的處理方法后再將處理函數(shù)做一些修改,即可以應(yīng)用到您喜歡的開發(fā)工具中去。
特技一、模糊淡出效果
也許您對(duì)淡入淡出效果較為熟悉,但對(duì)一邊淡出一邊模糊的效果一定感到新鮮吧!
首先分別談?wù)劦雠c模糊效果的原理。淡出函數(shù)的原理很簡(jiǎn)單,就是將每一像素點(diǎn)的R、G、B顏色值減去相同的整數(shù)直至零,這樣即可實(shí)現(xiàn)整幅圖的暗化。模糊函數(shù)相對(duì)要復(fù)雜一些,因?yàn)楸仨毧紤]周圍像素的影響,這就要引入加權(quán)算法,按照給定的系數(shù)對(duì)周圍像素點(diǎn)和當(dāng)前點(diǎn)的顏色值進(jìn)行加權(quán)運(yùn)算。
下面讓我們參考范例。在C++Builder中創(chuàng)建新的工程(窗體保存為test.cpp),在Form中加入一個(gè)Image控件、一個(gè)Timer控件和一個(gè)Button控件。把Image控件的Autosize屬性改為 True,Visible屬性改為False,Align屬性改為alClient,把Timer控件的Enable屬性改為 False,Interval屬性改為10,把Button控件的Caption屬性改為“觀看淡出模糊效果并且退出”,其他的都采用默認(rèn)屬性。
打開test.h頭文件,在其中加入淡出函數(shù)和模糊函數(shù)的聲明:
void softdowncolor(TImage *Bp,int step); //淡出函數(shù)
void softflt(TImage *Bp); //模糊函數(shù)
其中,淡出函數(shù)softdowncolor的step參數(shù)是在淡出時(shí)
減掉的顏色值,你可以通過它來控制淡出的速率。
接著,在test.cpp文件中加入淡出函數(shù)和模糊函數(shù)的實(shí)現(xiàn):
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];
在介紹這些特技處理方法之前,讓我們先做一些技術(shù)約定:用C++Builder開發(fā)工具編寫,應(yīng)用ScanLine處理技術(shù)(可極大提升圖像處理速度)。如果您用的不是C++Builder開發(fā)工具也沒關(guān)系,先看懂下面的處理方法后再將處理函數(shù)做一些修改,即可以應(yīng)用到您喜歡的開發(fā)工具中去。
特技一、模糊淡出效果
也許您對(duì)淡入淡出效果較為熟悉,但對(duì)一邊淡出一邊模糊的效果一定感到新鮮吧!
首先分別談?wù)劦雠c模糊效果的原理。淡出函數(shù)的原理很簡(jiǎn)單,就是將每一像素點(diǎn)的R、G、B顏色值減去相同的整數(shù)直至零,這樣即可實(shí)現(xiàn)整幅圖的暗化。模糊函數(shù)相對(duì)要復(fù)雜一些,因?yàn)楸仨毧紤]周圍像素的影響,這就要引入加權(quán)算法,按照給定的系數(shù)對(duì)周圍像素點(diǎn)和當(dāng)前點(diǎn)的顏色值進(jìn)行加權(quán)運(yùn)算。
下面讓我們參考范例。在C++Builder中創(chuàng)建新的工程(窗體保存為test.cpp),在Form中加入一個(gè)Image控件、一個(gè)Timer控件和一個(gè)Button控件。把Image控件的Autosize屬性改為 True,Visible屬性改為False,Align屬性改為alClient,把Timer控件的Enable屬性改為 False,Interval屬性改為10,把Button控件的Caption屬性改為“觀看淡出模糊效果并且退出”,其他的都采用默認(rèn)屬性。
打開test.h頭文件,在其中加入淡出函數(shù)和模糊函數(shù)的聲明:
void softdowncolor(TImage *Bp,int step); //淡出函數(shù)
void softflt(TImage *Bp); //模糊函數(shù)
其中,淡出函數(shù)softdowncolor的step參數(shù)是在淡出時(shí)
減掉的顏色值,你可以通過它來控制淡出的速率。
接著,在test.cpp文件中加入淡出函數(shù)和模糊函數(shù)的實(shí)現(xiàn):
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];