📄 unit2.cpp
字号:
void TForm2::f_imageZoom(bool zoomBS)
{
if(zoomBS)
if(iZoom>=iMaxZoom)
{
Image1->Cursor=14;
return;
}
else
{
Image1->Cursor=12;
iZoom++;
}
else
if(iZoom<1)
{
Image1->Cursor=14;
return;
}
else
{
Image1->Cursor=13;
iZoom--;
}
Panel1->Width=lPicWidth/(1 - 0.2*iZoom);
Panel1->Height=lPicHeight/(1 - 0.2*iZoom);
if(iZoom>=iMaxZoom||iZoom<1)
Image1->Cursor=14;
SendMessage(this->Handle,WM_SIZE,0,0);
}
//---------------------------------------------------------------------------
void TForm2::f_Form2SetCursor(TCursor tCursor)
{
Image1->Cursor=tCursor;
return;
}
//---------------------------------------------------------------------------
bool TForm2::f_imageCopy(int iCopyx,int iCopyy,int iWidth,int iHeight)
{
bBitmapCopy->Width=iWidth;
bBitmapCopy->Height=iHeight;
::BitBlt(bBitmapCopy->Canvas->Handle,0,0,iWidth,iHeight,Image1->Picture->Bitmap->Canvas->Handle,iCopyx,iCopyy,SRCCOPY);
Form1->Image1->Picture->Bitmap->Assign(bBitmapCopy);
return true;
}
//---------------------------------------------------------------------------
void TForm2::f_iamgePaste()
{
if(!Image2->Visible)
return;
iPicBegin=(iPicNow+1)%iPicNum;
sOperator[iPicBegin]="粘贴";
bBitmapCopy->Width=Image2->Picture->Bitmap->Width;
bBitmapCopy->Height=Image2->Picture->Bitmap->Height;
bBitmapCopy->Assign(Image2->Picture->Bitmap);
bPicArray[iPicBegin]->Assign(Image1->Picture->Bitmap);
::BitBlt(bPicArray[iPicBegin]->Canvas->Handle,Image2->Left*(1 - 0.2*iZoom),Image2->Top*(1 - 0.2*iZoom),bBitmapCopy->Width,bBitmapCopy->Height,bBitmapCopy->Canvas->Handle,0,0,lCopyStyle);
Image2->Visible=false;
iPicNow=iPicBegin;
iPicBegin++;
iPicBegin=iPicBegin%iPicNum;
if(iPicBegin==iPicEnd)
iPicEnd=(iPicEnd+1)%iPicNum;
Image1->Picture->Bitmap->Assign(bPicArray[iPicNow]);
SetForm3List();
}
//---------------------------------------------------------------------------
void TForm2::f_imageGray1()
{
f_imagePointProcess(1);
}
void TForm2::f_imageGray2() //
{
f_imagePointProcess(2);
}
void TForm2::f_imageGray3(float Wr,float Wg,float Wb)
{
fWtempR=Wr;
fWtempG=Wg;
fWtempB=Wb;
f_imagePointProcess(3);
}
void TForm2::f_imageGray4()
{
f_imagePointProcess(4);
}
void TForm2::f_imageContrast(float fa,int ib)
{
fla=fa;
ilb=ib;
f_imagePointProcess(5);
}
void TForm2::f_imageBright(int ib)
{
ilb=ib;
f_imagePointProcess(6);
}
void TForm2::f_imageTurnover()
{
f_imagePointProcess(7);
}
void TForm2::SetForm3List()
{
int i=0;
int j=iPicEnd;
Form3->ListBox1->Clear();
do{
if(iPicNow==j)
Form3->ListBox1->Items->Add("→"+sOperator[j]);
else
Form3->ListBox1->Items->Add(sOperator[j]);
i++;
j=(i+iPicEnd)%iPicNum;
}while(j!=iPicBegin);
}
void TForm2::SetProcessBegin()
{
if(iGraphStyle!=1)
{
pProcessBegin.x=0;
pProcessBegin.y=0;
pProcessEnd.x=lPicWidth-1;
pProcessEnd.y=lPicHeight-1;
}
Form3->ProgressBar1->Position=0;
tCurTemp=Screen->Cursor;
Screen->Cursor=crHourGlass;
iPicBegin=(iPicNow+1)%iPicNum;
if(pProcessBegin.x<0)
pProcessBegin.x=0;
if(pProcessBegin.y<0)
pProcessBegin.y=0;
if(pProcessEnd.x+1>lPicWidth)
pProcessEnd.x=lPicWidth-1;
if(pProcessEnd.y+1>lPicHeight)
pProcessEnd.y=lPicHeight-1;
Form3->ProgressBar1->Position++;
lProSum=(pProcessEnd.y-pProcessBegin.y)*(pProcessEnd.x-pProcessBegin.x);
lProStep=lProSum/50;
lProi=0;
}
void TForm2::SetProcessEnd()
{
iPicNow=iPicBegin;
iPicBegin++;
iPicBegin=iPicBegin%iPicNum;
if(iPicBegin==iPicEnd)
iPicEnd=(iPicEnd+1)%iPicNum;
Image1->Picture->Bitmap->Assign(bPicArray[iPicNow]);
SetForm3List();
Screen->Cursor=tCurTemp;
Form3->ProgressBar1->Position=0;
}
void TForm2::f_imagePointProcess(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];
switch(iStyle){
case 1:
iR=GetRValue(tTempColor);
iG=GetGValue(tTempColor);
iB=GetBValue(tTempColor);
if(iR<iG)
iR=iG;
if(iR<iB)
iR=iB;
iG=iB=iR;
break;
case 2:
iR=GetRValue(tTempColor);
iG=GetGValue(tTempColor);
iB=GetBValue(tTempColor);
iR=iG=iB=(iR+iG+iB)/3;
break;
case 3:
iR=GetRValue(tTempColor);
iG=GetGValue(tTempColor);
iB=GetBValue(tTempColor);
iR=iG=iB=(float)iR*fWtempR+(float)iG*fWtempG+(float)iB*fWtempB;
break;
case 4:
iR=GetRValue(tTempColor);
iG=GetGValue(tTempColor);
iB=GetBValue(tTempColor);
iR=iG=iB=(float)iR*0.299+(float)iG*0.587+(float)iB*0.114;
break;
case 5:
iR=fla*GetRValue(tTempColor)+ilb;
if(iR>255)
iR=255;
else if(iR<0)
iR=0;
iG=fla*GetGValue(tTempColor)+ilb;
if(iG>255)
iG=255;
else if(iG<0)
iG=0;
iB=fla*GetBValue(tTempColor)+ilb;
if(iB>255)
iB=255;
else if(iB<0)
iB=0;
break;
case 6:
iR=GetRValue(tTempColor)+ilb;
if(iR>255)
iR=255;
else if(iR<0)
iR=0;
iG=GetGValue(tTempColor)+ilb;
if(iG>255)
iG=255;
else if(iG<0)
iG=0;
iB=GetBValue(tTempColor)+ilb;
if(iB>255)
iB=255;
else if(iB<0)
iB=0;
break;
case 7:
iR=255 - GetRValue(tTempColor);
iG=255 - GetGValue(tTempColor);
iB=255 - GetBValue(tTempColor);
break;
default:
break;
}
tTempColor=(TColor)RGB(iR,iG,iB);
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lYTemp]=tTempColor;
}
}
SetProcessEnd();
}
void TForm2::f_imageSmoothProcess(int iStyle)
{
SetProcessBegin();
switch(iStyle)
{
case 1:
sOperator[iPicBegin]="邻域平滑";
iSmoothStyle=1;
break;
case 2:
sOperator[iPicBegin]="边界查找";
iSmoothStyle=2;
break;
case 3:
sOperator[iPicBegin]="拉普拉斯锐化";
iSmoothStyle=3;
break;
case 4:
sOperator[iPicBegin]="浮雕效果";
iSmoothStyle=4;
break;
case 5:
sOperator[iPicBegin]="柔化处理";
iSmoothStyle=5;
break;
case 6:
sOperator[iPicBegin]="马赛克处理";
iSmoothStyle=5;
break;
default:
break;
}
if(iStyle==6)
{
lProStep/=(iMASAIKE*iMASAIKE);
if(lProStep<1)
lProStep=1;
bPicArray[iPicBegin]->Assign(Image1->Picture->Bitmap);
Form3->ProgressBar1->Position++;
for(lYTemp=pProcessBegin.y + 1;lYTemp<pProcessEnd.y;lYTemp+=iMASAIKE)
{
for(lXTemp=pProcessBegin.x + 1;lXTemp<pProcessEnd.x;lXTemp+=iMASAIKE)
{
if(lProi==lProStep)
{
lProi=0;
Form3->ProgressBar1->Position++;
}
lProi++;
tTempColor=getColor(lXTemp,lYTemp);
for(iTemp=lYTemp-1;iTemp<=lYTemp+iMASAIKE-2;iTemp++)
for(jTemp=lXTemp-1;jTemp<=lXTemp+iMASAIKE-2;jTemp++)
bPicArray[iPicBegin]->Canvas->Pixels[jTemp][iTemp]=tTempColor;
}
}
SetProcessEnd();
return;
}
for(lYTemp=lPicHeight - 1;lYTemp>=0;lYTemp --)
{
for(lXTemp=lPicWidth - 1;lXTemp>=0;lXTemp --)
{
if(lProi==lProStep)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -