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

📄 unit2.~cpp

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