当前位置:编程学习 > C/C++ >>

图像镜像

三个函数,垂直镜像、水平镜像、自定义镜像。

 

[cpp]
void CDIGTLSView::OnMirrorVertical()    //垂直镜像 
//程序编制:李立宗  lilizong@gmail.com 
// 2012-8-6 
    { 
        if(myImage1.IsNull()) 
            OnOpenResourceFile(); 
        if(myImage2.IsNull()){ 
            //myImage2.Destroy(); 
            myImage2.Create(myImage1.GetWidth(),myImage1.GetHeight(),24,0); 
        } 
        COLORREF pixel;  
        int maxY = myImage1.GetHeight(); 
        int maxX=myImage1.GetWidth(); 
        int r,g,b,avg;  
        double c; 
        byte* pRealData; 
        byte* pRealData2; 
        pRealData=(byte*)myImage1.GetBits(); 
        pRealData2=(byte*)myImage2.GetBits(); 
        int pit=myImage1.GetPitch(); 
        int pit2=myImage2.GetPitch(); 
        //需要注意,pit和pit2的值并不一样,所以如果使用一个值,会导致不同的结果出现 
        //CString str; 
        //str.Format(TEXT("%d"),pit2); 
        //MessageBox(str); 
        //str.Format(TEXT("%d"),pit2); 
        //MessageBox(str); 
        int bitCount=myImage1.GetBPP()/8; 
        int bitCount2=myImage2.GetBPP()/8; 
        //CString str; 
        //str.Format(TEXT("%d"),bitCount); 
        //MessageBox(str); 
        //str.Format(TEXT("%d"),bitCount2); 
        //MessageBox(str); 
        int newValue; 
        int tempR,tempG,tempB; 
        int key1,key2;  //用来控制方向 
        //srand((unsigned)time(NULL));  
        //key1=rand()%100; 
        //key2=rand()%100; 
        //if(key1>50) 
        //  key1=-1; 
        //else 
        //  key1=1; 
        //if(key2<50) 
        //  key2=1; 
        //else 
        //  key2=-1; 
        //int xTrans=key1*rand()%(int)(maxX/1.5)+1; 
        //int yTrans=key2*rand()%(int)(maxY/1.5)+1; 
        //说明:将生产的图像作为24位图处理。 
        for (int y=0; y<maxY; y++) { 
            for (int x=0; x<maxX; x++) { 
                if((maxY-1-y>=0)&&(maxY-1-y<=maxY)) 
                {   tempR=(int)(int)(*(pRealData+pit*(maxY-1-y)+x*bitCount)); 
                if(bitCount==1) 
                {tempG=tempR; 
                tempB=tempR;} 
                else 
                { 
 
                    tempG=(int)(int)(*(pRealData+pit*(maxY-1-y)+x*bitCount+1)); 
                    tempB=(int)(int)(*(pRealData+pit*(maxY-1-y)+x*bitCount+2)); 
                } 
                } 
                else 
                { 
                    tempR=255; 
                    tempG=0; 
                    tempB=0; 
                } 
 
                *(pRealData2+pit2*y+x*bitCount2)=tempR; 
                *(pRealData2+pit2*y+x*bitCount2+1)=tempG; 
                *(pRealData2+pit2*y+x*bitCount2+2)=tempB; 
            } 
 
        } 
        Invalidate(); 
    } 
 
 
    void CDIGTLSView::OnMirrorHorizental()    //水平镜像 
    { 
        if(myImage1.IsNull()) 
            OnOpenResourceFile(); 
        if(myImage2.IsNull()){ 
            //myImage2.Destroy(); 
            myImage2.Create(myImage1.GetWidth(),myImage1.GetHeight(),24,0); 
        }

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,