⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit2.~cpp

📁 05年毕业设计(BC)-图像处理软件及完整源代码
💻 ~CPP
📖 第 1 页 / 共 4 页
字号:
        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 + -