📄 unit2.~cpp
字号:
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];
iBinaryAverRGB=GetRValue(tTempColor);
iG=GetGValue(tTempColor);
iB=GetBValue(tTempColor);
if(iBinaryAverRGB!=iG||iG!=iB)
iBinaryAverRGB=iBinaryAverRGB*0.299+iG*0.587+iB*0.114;
iSideSum=0;
for(i=-1;i<2;i++)
{
for(j=-1;j<2;j++)
{
if(i||j)
{
tTempColor=Image1->Canvas->Pixels[lXTemp+j][lYTemp+i];
iR=GetRValue(tTempColor);
iG=GetGValue(tTempColor);
iB=GetBValue(tTempColor);
if(iR!=iG||iG!=iB)
iR=iR*0.299+iG*0.587+iB*0.114;
if(iBinaryAverRGB>iR)
iSideSum+=iBinaryAverRGB-iR;
}
}
}
lGrayLad[iBinaryAverRGB]+=iSideSum;
if(lProi==lProStep)
{
lProi=0;
Form3->ProgressBar1->Position++;
}
lProi++;
}
}
Form3->ProgressBar1->Position=lProi=0;
lforx=lGrayLad[0];
iThre=0;
for(i=1;i<255;i++)
{
if(lforx<lGrayLad[i])
{
lforx=lGrayLad[i];
iThre=i;
}
}
//阈值计算完毕 开始二值化
for(lYTemp=pProcessBegin.y;lYTemp<=pProcessEnd.y;lYTemp ++)
{
for(lXTemp=pProcessBegin.x;lXTemp<=pProcessEnd.x;lXTemp ++)
{
tTempColor=Image1->Canvas->Pixels[lXTemp][lYTemp];
iR=GetRValue(tTempColor);
iG=GetGValue(tTempColor);
iB=GetBValue(tTempColor);
if(iR!=iG||iG!=iB)
iR=iR*0.299+iG*0.587+iB*0.114;
if(iR>iThre)
tTempColor=(TColor)0x00FFFFFF;
else
tTempColor=(TColor)0x00000000;
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lYTemp]=tTempColor;
if(lProi==lProStep)
{
lProi=0;
Form3->ProgressBar1->Position++;
}
lProi++;
}
}
SetProcessEnd();
Form13=new TForm13(NULL);
Form13->Label2->Caption=IntToStr(iThre);
Form13->ShowModal();
}
//------------------------------------------------------------------------------
//图象旋转
void TForm2::f_imageRotateProcess(int iDirection)
{
SetProcessBegin();
switch(iDirection){
case 1:
sOperator[iPicBegin]="180°旋转";
break;
case 2:
sOperator[iPicBegin]="水平翻转";
break;
case 3:
sOperator[iPicBegin]="垂直翻转";
break;
default:
break;
}
for(lYTemp=0;lYTemp<lPicHeight;lYTemp ++)
{
for(lXTemp=0;lXTemp<=lPicWidth;lXTemp ++)
{
tTempColor=Image1->Canvas->Pixels[lXTemp][lYTemp];
if(iDirection==1)
bPicArray[iPicBegin]->Canvas->Pixels[lPicWidth - lXTemp][lPicHeight - lYTemp]=tTempColor;
else if(iDirection==2)
bPicArray[iPicBegin]->Canvas->Pixels[lPicWidth - lXTemp][lYTemp]=tTempColor;
else
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lPicHeight - lYTemp]=tTempColor;
if(lProi==lProStep)
{
lProi=0;
Form3->ProgressBar1->Position++;
}
lProi++;
}
}
SetProcessEnd();
}
//清除图像----------------------------------------------------------------------
void TForm2::f_imageClear(int iArg)
{
SetProcessBegin();
sOperator[iPicBegin]="清除图像";
if(iArg)
{
pProcessBegin.x=pProcessBegin.y=0;
pProcessEnd.x=lPicWidth-1;
pProcessEnd.y=lPicHeight-1;
lProSum=lPicWidth*lPicHeight;
lProStep=lProSum/50;
if(iGraphStyle==1)
{
iGraphStyle=0;
Form3->SpeedButton4->Down=true;
Shape1->Visible=false;
}
}
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;
}
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lYTemp]=tGroundColor;
}
}
SetProcessEnd();
}
//----------------------------------------------------------------------------
//菜单右键
void __fastcall TForm2::PopupMenu1Popup(TObject *Sender)
{
if(iZoom>iMaxZoom||iZoom<1)
PopupMenu1->Items->Items[0]->Enabled=false;
else
PopupMenu1->Items->Items[0]->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N1Click(TObject *Sender)
{
iZoom=0;
Panel1->Width=lPicWidth;
Panel1->Height=lPicHeight;
SendMessage(this->Handle,WM_SIZE,0,0);
}
//---------------------------------------------------------------------------
//图像全选
void TForm2::f_imageAllChoose(bool bStyle)
{
if(bStyle)
{
iGraphStyle=1;
Form3->SpeedButton6->Down=true;
pProcessBegin.x=0;
Shape1->Left=1;
pProcessBegin.y=0;
Shape1->Top=1;
pProcessEnd.x=lPicWidth;
Shape1->Width=Panel1->Width - 1;
pProcessEnd.y=lPicHeight;
Shape1->Height=Panel1->Height - 1;
Shape1->Shape=stRectangle;
Shape1->Visible=true;
}
else
{
iGraphStyle=0;
pProcessBegin.x=0;
pProcessBegin.y=0;
pProcessEnd.x=lPicWidth;
pProcessEnd.y=lPicHeight;
Form3->SpeedButton4->Down=true;
Shape1->Visible=false;
}
}
//菜单全选
void __fastcall TForm2::N2Click(TObject *Sender)
{
f_imageAllChoose(true);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N3Click(TObject *Sender)
{
f_imageAllChoose(false);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Shape1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Shift.Contains(ssRight))
PopupMenu2->Popup(Mouse->CursorPos.x,Mouse->CursorPos.y);
}
//---------------------------------------------------------------------------
//每次失去焦点时执行
void __fastcall TForm2::FormDeactivate(TObject *Sender)
{
pPBegin.x=pProcessBegin.x;
pPBegin.y=pProcessBegin.y;
pPEnd.x=pProcessEnd.x;
pPEnd.y=pProcessEnd.y;
}
//---------------------------------------------------------------------------
//图像点操作->橡皮擦7 历史6 平滑9
void TForm2::f_imagePointProcess(int iPStyle,int x,int y)
{ //lofx,lofy,lforx,lfory;
if(x<0||y<0||x>=lPicWidth||y>=lPicHeight)
return;
lforx=x+iPointRange;
lfory=y+iPointRange;
if(!iPicNow)
iTemp=iPicNum-1;
else
iTemp=iPicNow-1;
for(lofy=y-iPointRange;lofy<=lfory;lofy++)
for(lofx=x-iPointRange;lofx<=lforx;lofx++)
{
if(iPStyle==6)
Image1->Canvas->Pixels[lofx][lofy]=bPicArray[iTemp]->Canvas->Pixels[lofx][lofy];
else
Image1->Canvas->Pixels[lofx][lofy]=tGroundColor;
}
}
void __fastcall TForm2::N4Click(TObject *Sender)
{
f_imageCopy(pProcessBegin.x,pProcessBegin.y,pProcessEnd.x-pProcessBegin.x,pProcessEnd.y-pProcessBegin.y);
N5->Enabled=true;
Form1->N49->Enabled=true;
Shape1->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N5Click(TObject *Sender)
{
if(Form1->Image1->Picture->Bitmap->Width<1)
return;
Image2->Picture->Bitmap->Assign(Form1->Image1->Picture->Bitmap);
Image2->Left=0;
Image2->Top=0;
Image2->Visible=true;
N6->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Image2MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(!Shift.Contains(ssLeft))
return;
Image2->Left=Image2->Left+X-lofx;
Image2->Top=Image2->Top+Y-lofy;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Image2MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
lofx=X;
lofy=Y;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N6Click(TObject *Sender)
{
Image2->Visible=false;
N6->Enabled=false;
}
//---------------------------------------------------------------------------
//图像曝光处理
void TForm2::f_imageExposureProcess(int iBaseColor)
{
SetProcessBegin();
sOperator[iPicBegin]="曝光处理";
if(iBaseColor<1)
iBaseColor=1;
else if(iBaseColor>255)
iBaseColor=255;
//开始点运算
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);
if(iR<iBaseColor)
iR=255-iR;
if(iG<iBaseColor)
iG=255-iG;
if(iB<iBaseColor)
iB=255-iB;
tTempColor=(TColor)RGB(iR,iG,iB);
bPicArray[iPicBegin]->Canvas->Pixels[lXTemp][lYTemp]=tTempColor;
}
}
SetProcessEnd();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -