图片模糊、锐化、雕刻

王朝other·作者佚名  2008-06-01
宽屏版  字体: |||超大  

void S_Filter(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int Div,int xg)//图片效果

{

//0:模糊1:锐化3:雕刻

int flt[9];

switch (xg)

{

case 0:

{

flt[0]=5;flt[1]=5;flt[2]=5;

flt[3]=5;flt[4]=60;flt[5]=5;

flt[6]=5;flt[7]=5;flt[8]=5;

};

break;

case 1:

{

flt[0]=0;flt[1]=-5;flt[2]=0;

flt[3]=-5;flt[4]=30;flt[5]=-5;

flt[6]=0;flt[7]=-5;flt[8]=0;

};

break;

default:

{

flt[0]=-15;flt[1]=-15;flt[2]=0;

flt[3]=-15;flt[4]=15;flt[5]=15;

flt[6]=0;flt[7]=15;flt[8]=0;

};

}

int XX[3];

BYTE *ptr,*ptru,*ptrd,*ptr1;

NewPic->Assign(Source);

for (int y = 1; y < NewPic->Height-1; y++)

{

ptr=(BYTE *)NewPic->ScanLine[y];

ptr1=(BYTE *)Source->ScanLine[y];

ptru=(BYTE *)Source->ScanLine[y-1];

ptrd=(BYTE *)Source->ScanLine[y+1];

for(int x=3;x<(Source->Width-1)*3;x+=3)

{

XX[0]=0;XX[1]=0;XX[2]=0;

for(int i=-1;i<=1;i++)

for(int j=0;j<3;j++)

XX[j]+=ptr1[x+3*i+j]*flt[4+i];

for(int i=-1;i<=1;i++)

for(int j=0;j<3;j++)

XX[j]+=ptru[x+3*i+j]*flt[1+i];

for(int i=-1;i<=1;i++)

for(int j=0;j<3;j++)

XX[j]+=ptrd[x+3*i+j]*flt[7+i];

for (int i=0;i<3;i++)

{

XX[i]=XX[i]/Div;

XX[i]=MAX(XX[i],0);

XX[i]=MIN(XX[i],255);

ptr[x+i]=XX[i];

}

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有