最好是能以对称轴实现任意角度翻转

解决方案 »

  1.   

    贴个水平/垂直翻转code:///***************************************************************/           
    /*函数名称:JingXiang(bool fangshi)                                        
    /*函数类型:void
    /*参数说明:fangshi --判断标志为 true 水平镜像,为 false 垂直镜像                                      
    /*功能:对图像进行镜像显示。            
    /***************************************************************/ 
    void JiHeBianHuanDib::JingXiang(bool fangshi)
    {
        // 指向源图像的指针
    LPBYTE lpSrc;
    LPBYTE  p_data;
    // 指向要复制区域的指针
    LPBYTE lpDst;
    // 指向复制图像的指针
    LPBYTE temp;
    // 循环变量
    LONG i;
    LONG j;
    //图像的高与宽
    long height=this->GetHeight();
    long wide=this->GetWidth();
    p_data=this->GetData();
    // 暂时分配内存,以保存一行图像
    temp = new BYTE[wide*height];
    // 判断镜像方式
    if (fangshi) // 水平镜像
    {
    if (m_pBitmapInfoHeader->biBitCount<9) //灰度图像
    {
    // 针对图像每行进行操作
    for(j = 0; j < height; j++)
    {
    for(i = 0; i <  wide;i++)
    {
    lpSrc = (LPBYTE)p_data +wide *j + i;
    lpDst = (LPBYTE)temp + wide* j+ wide - i;
    *lpDst = *lpSrc;
    }
    }
    memcpy(p_data,temp, wide*height);
    }
    else //24位彩色
    {
    wide=this->GetDibWidthBytes();
    temp=new BYTE[height*wide];
    // 针对图像每行进行操作
    for(j = 0; j < height; j++)
    {
    for(i = 0; i <  wide;i=i+3)
    {
    lpSrc = (LPBYTE)(p_data +wide *j + i);
    lpDst = (LPBYTE)temp + wide* j+ wide - i;
    *(lpDst) = *lpSrc;
    *(lpDst+1) = *(lpSrc+1);
    *(lpDst+2) = *(lpSrc+2);
    }
    }
    memcpy(p_data,temp, wide*height);
    }
    }
    else // 垂直镜像
    {
            if (m_pBitmapInfoHeader->biBitCount<9) //灰度图像
    {
    // 针对上半图像进行操作
    for(i = 0; i <  wide;i++)
    {
    for(j = 0; j < height; j++)
    {
    lpSrc = (LPBYTE)p_data + wide * j+i;
    lpDst = (LPBYTE)temp + wide * (height - j - 1)+i;
    *lpDst = *lpSrc;
    }
    }
    memcpy(p_data,temp, wide*height);        
    }
    else //24位彩色
    {
    wide=this->GetDibWidthBytes();
    temp=new BYTE[height*wide];
    // 针对上半图像进行操作
    for(i = 0; i <  wide;i++)
    {
    for(j = 0; j < height; j++)
    {
    lpSrc = (LPBYTE)p_data + wide * j+i;
    lpDst = (LPBYTE)temp + wide * (height - j - 1)+i;
    *lpDst = *lpSrc;
    }
    }
    memcpy(p_data,temp, wide*height);
    // 释放内存
    delete temp;
    }    
    }
    }