📄 unit2.~cpp
字号:
{
if(lProi==lProStep)
{
lProi=0;
Form3->ProgressBar1->Position++;
}
lProi++;
if((lYTemp<pProcessBegin.y||lYTemp>pProcessEnd.y)||(lXTemp<pProcessBegin.x||lXTemp>pProcessEnd.x))
{
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lYTemp]=Image1->Canvas->Pixels[lXTemp][lYTemp];
continue;
}
tTempColor=getColor(lXTemp,lYTemp);
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lYTemp]=tTempColor;
}
}
SetProcessEnd();
}
//取模板颜色-----从属于f_imageSmoothProcess函数---------------------------------
TColor TForm2::getColor(long fetchX,long fetchY)
{
int i,j,num;
num=0;
iR=iG=iB=i=0;
lofy=fetchY-1;
lfory=lofy+iTNum;
lofx=fetchX-1;
lforx=lofx+iTNum;
for(;lofy<lfory;lofy++)
{
j=0;
for(lofx=fetchX-1;lofx<lforx;lofx++)
{
if((lofx>=0)&&(lofx<lPicWidth)&&(lofy>=0)&&(lofy<lPicHeight)&&iTemplate[i][j])
{
tTempColor=Image1->Canvas->Pixels[lofx][lofy];
iR+=GetRValue(tTempColor)*iTemplate[i][j];
iG+=GetGValue(tTempColor)*iTemplate[i][j];
iB+=GetBValue(tTempColor)*iTemplate[i][j];
num++;
}
j++;
}
i++;
}
if(iSmoothStyle==5)
{
iR=iR/16;
iG=iG/16;
iB=iB/16;
}
if(iSmoothStyle==1||iSmoothStyle==2||iSmoothStyle==4)
{
if(iSmoothStyle==1||iSmoothStyle==2)
{
iR=iR/num;
iG=iG/num;
iB=iB/num;
}
else
{
iR+=iSunConstant;
iG+=iSunConstant;
iB+=iSunConstant;
}
}
if(iR>255)
iR=255;
else if(iR<0)
iR=0;
if(iG>255)
iG=255;
else if(iG<0)
iG=0;
if(iB>255)
iB=255;
else if(iB<0)
iB=0;
tTempColor=(TColor)RGB(iR,iG,iB);
return tTempColor;
}
//图像锐化操作函数-------霓虹处理-----------------------------------------------
void TForm2::f_imageSharpProcess(int iStyle)
{
int iRtemp,iGtemp,iBtemp;
SetProcessBegin();
switch(iStyle)
{
case 1:
sOperator[iPicBegin]="Robert梯度锐化";
break;
case 2:
sOperator[iPicBegin]="霓虹处理";
break;
default:
break;
}
iR=iG=iB=0;
//开始运算
for(lYTemp=lPicHeight - 1;lYTemp>=0;lYTemp --)
{
for(lXTemp=lPicWidth - 1;lXTemp>=0;lXTemp --)
{
if(lProi==lProStep)
{
lProi=0;
Form3->ProgressBar1->Position++;
}
lProi++;
if((lYTemp<pProcessBegin.y||lYTemp>pProcessEnd.y)||(lXTemp<pProcessBegin.x||lXTemp>pProcessEnd.x))
{
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lYTemp]=Image1->Canvas->Pixels[lXTemp][lYTemp];
continue;
}
tTempColor=Image1->Canvas->Pixels[lXTemp][lYTemp];
iRtemp=GetRValue(tTempColor);
iGtemp=GetGValue(tTempColor);
iBtemp=GetBValue(tTempColor);
tTempColor=Image1->Canvas->Pixels[lXTemp+1][lYTemp];
if(iStyle==1)
{
iR=abs(GetRValue(tTempColor)-iRtemp);
iG=abs(GetGValue(tTempColor)-iGtemp);
iB=abs(GetBValue(tTempColor)-iBtemp);
}
else if(iStyle==2)
{
iR=(GetRValue(tTempColor)-iRtemp)*(GetRValue(tTempColor)-iRtemp);
iG=(GetGValue(tTempColor)-iGtemp)*(GetGValue(tTempColor)-iGtemp);
iB=(GetBValue(tTempColor)-iBtemp)*(GetBValue(tTempColor)-iBtemp);
}
tTempColor=Image1->Canvas->Pixels[lXTemp][lYTemp+1];
if(iStyle==1)
{
iR=abs(GetRValue(tTempColor)-iRtemp)+iR;
iG=abs(GetGValue(tTempColor)-iGtemp)+iG;
iB=abs(GetBValue(tTempColor)-iBtemp)+iB;
if(iR<iThre)
iR=iRtemp;
if(iG<iThre)
iG=iGtemp;
if(iB<iThre)
iB=iBtemp;
}
else if(iStyle==2)
{
iR=2*sqrt((GetRValue(tTempColor)-iRtemp)*(GetRValue(tTempColor)-iRtemp)+iR);
iG=2*sqrt((GetGValue(tTempColor)-iGtemp)*(GetGValue(tTempColor)-iGtemp)+iG);
iB=2*sqrt((GetBValue(tTempColor)-iBtemp)*(GetBValue(tTempColor)-iBtemp)+iB);
}
if(iR>255)
iR=255;
if(iG>255)
iG=255;
if(iB>255)
iB=255;
tTempColor=(TColor)RGB(iR,iG,iB);
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lYTemp]=tTempColor;
}
}
SetProcessEnd();
}
//伪彩色操作化函数--------------------------------------------------------------
void TForm2::f_imageColorProcess(int iStyle)
{
SetProcessBegin();
//设置操作字符串纪录
switch(iStyle){
case 1:
sOperator[iPicBegin]="红色饱和化";
break;
case 2:
sOperator[iPicBegin]="绿色饱和化";
break;
case 3:
sOperator[iPicBegin]="蓝色饱和化";
break;
case 4:
sOperator[iPicBegin]="黄色饱和化";
break;
case 5:
sOperator[iPicBegin]="青色饱和化";
break;
case 6:
sOperator[iPicBegin]="紫色饱和化";
break;
case 7:
sOperator[iPicBegin]="逆色彩系统变换";
break;
default:
break;
}
//开始点运算
for(lYTemp=lPicHeight - 1;lYTemp>=0;lYTemp --)
{
for(lXTemp=lPicWidth - 1;lXTemp>=0;lXTemp --)
{
if(lProi==lProStep)
{
lProi=0;
Form3->ProgressBar1->Position++;
}
lProi++;
if((lYTemp<pProcessBegin.y||lYTemp>pProcessEnd.y)||(lXTemp<pProcessBegin.x||lXTemp>pProcessEnd.x))
{
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lYTemp]=Image1->Canvas->Pixels[lXTemp][lYTemp];
continue;
}
tTempColor=Image1->Canvas->Pixels[lXTemp][lYTemp];
iR=GetRValue(tTempColor);
iG=GetGValue(tTempColor);
iB=GetBValue(tTempColor);
switch(iStyle){
case 1:
iR=(float)iR*0.299+(float)iG*0.587+(float)iB*0.114;
iG=iB=0;
break;
case 2:
iR=(float)iR*0.299+(float)iG*0.587+(float)iB*0.114;
iR=iB=0;
break;
case 3:
iR=(float)iR*0.299+(float)iG*0.587+(float)iB*0.114;
iR=iG=0;
break;
case 4:
iR=(float)iR*0.299+(float)iG*0.587+(float)iB*0.114;
iG=iR;
iB=0;
break;
case 5:
iR=(float)iR*0.299+(float)iG*0.587+(float)iB*0.114;
iG=iB=iR;
iR=0;
break;
case 6:
iR=(float)iR*0.299+(float)iG*0.587+(float)iB*0.114;
iB=iR;
iG=0;
break;
case 7:
iR=iR/0.299;
iG=iG/0.587;
iB=iB/0.114;
if(iR>255)
iR=255;
if(iG>255)
iG=255;
if(iB>255)
iB=255;
break;
default:
break;
}
tTempColor=(TColor)RGB(iR,iG,iB);
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lYTemp]=tTempColor;
}
}
SetProcessEnd();
}
//浮雕处理----------------------------------------------------------------------
void TForm2::f_imageEmbossProcess()
{
int i,j;
iTNum=3;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
iTemplate[i][j]=0;
iTemplate[1][1]=1;
switch(iSunDirection){
case 1:
iTemplate[1][0]=-1;
break;
case 2:
iTemplate[0][0]=-1;
break;
case 3:
iTemplate[0][1]=-1;
break;
case 4:
iTemplate[0][2]=-1;
break;
case 5:
iTemplate[1][2]=-1;
break;
case 6:
iTemplate[2][2]=-1;
break;
case 7:
iTemplate[2][1]=-1;
break;
case 8:
iTemplate[2][0]=-1;
break;
default:
break;
}
f_imageSmoothProcess(4);
}
//扩散效果处理函数----------------------------------------------------------------
void TForm2::f_imageSpreadProcess()
{
int i,j;
SetProcessBegin();
sOperator[iPicBegin]="扩散效果";
//开始运算
for(lYTemp=lPicHeight - 1;lYTemp>=0;lYTemp --)
{
for(lXTemp=lPicWidth - 1;lXTemp>=0;lXTemp --)
{
if(lProi==lProStep)
{
lProi=0;
Form3->ProgressBar1->Position++;
}
lProi++;
if((lYTemp<pProcessBegin.y||lYTemp>pProcessEnd.y)||(lXTemp<pProcessBegin.x||lXTemp>pProcessEnd.x))
{
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lYTemp]=Image1->Canvas->Pixels[lXTemp][lYTemp];
continue;
}
i=rand() % iSpreadBound - iSpreadBound/2;
j=rand() % iSpreadBound - iSpreadBound/2;
lofx=lXTemp+i;
lofy=lYTemp+j;
if((lofx>=0)&&(lofx<lPicWidth)&&(lofy>=0)&&(lofy<lPicHeight))
tTempColor=Image1->Canvas->Pixels[lofx][lofy];
else
tTempColor=Image1->Canvas->Pixels[lXTemp][lYTemp];
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lYTemp]=tTempColor;
}
}
SetProcessEnd();
}
//图像的二值化处理函数----------------------------------------------------------
void TForm2::f_imageBinaryProcess()
{
long lGrayLad[255];
int i,j;
int iBinaryAverRGB,iSideSum;
SetProcessBegin();
sOperator[iPicBegin]="图像二值化";
for(i=0;i<255;i++)
lGrayLad[i]=0;
//开始运算 先计算阈值 计算得到的阈值存放在iThre中
lYTemp=pProcessBegin.y;
if(!lYTemp)
lYTemp=1;
lforx=pProcessBegin.x;
if(!lforx)
lforx=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -