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

📄 unit2.cpp

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