现在正在做一个位图的旋转问题,不知道如何实现他绕定点旋转!希望高手指教

解决方案 »

  1.   

    if (hDIB != NULL)//HDIB nDIB存放BMP内存
    { LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);

    // 获取DIB宽度
    int cxDIB = (int) ::DIBWidth(lpDIB);

    // 获取DIB高度
    int cyDIB = (int) ::DIBHeight(lpDIB);
    //256色
      BYTE* pBmp = new BYTE[cxDIB];
     for (int j=0; j<cxDIB; j++)
      {
        for( int i = 0; i<cyDIB/2; i++ )
        {
           pBmp[j]=lpDIB[i*cxDIB+j];
           lpDIB[i*cxDIB+j]=lpDIB[(cyDIB-i-1)*cxDIB+j];
           lpDIB[(cyDIB-i-1)*cxDIB+j]=pBmp[j];
        }
      }}
    DWORD WINAPI DIBWidth(LPSTR lpDIB)
    {
    // 指向BITMAPINFO结构的指针(Win3.0)
    LPBITMAPINFOHEADER lpbmi;

    // 指向BITMAPCOREINFO结构的指针
    LPBITMAPCOREHEADER lpbmc; // 获取指针
    lpbmi = (LPBITMAPINFOHEADER)lpDIB;
    lpbmc = (LPBITMAPCOREHEADER)lpDIB; // 返回DIB中图像的宽度
    if (IS_WIN30_DIB(lpDIB))
    {
    // 对于Windows 3.0 DIB,返回lpbmi->biWidth
    return lpbmi->biWidth;
    }
    else
    {
    // 对于其它格式的DIB,返回lpbmc->bcWidth
    return (DWORD)lpbmc->bcWidth;
    }
    }
    /*************************************************************************
     *
     * 函数名称:
     *   DIBHeight()
     *
     * 参数:
     *   LPSTR lpDIB        - 指向DIB对象的指针
     *
     * 返回值:
     *   DWORD              - DIB中图像的高度
     *
     * 说明:
     *   该函数返回DIB中图像的高度。对于Windows 3.0 DIB,返回BITMAPINFOHEADER
     * 中的biHeight值;对于其它返回BITMAPCOREHEADER中的bcHeight值。
     *
     ************************************************************************/
    DWORD WINAPI DIBHeight(LPSTR lpDIB)
    {
    // 指向BITMAPINFO结构的指针(Win3.0)
    LPBITMAPINFOHEADER lpbmi;

    // 指向BITMAPCOREINFO结构的指针
    LPBITMAPCOREHEADER lpbmc; // 获取指针
    lpbmi = (LPBITMAPINFOHEADER)lpDIB;
    lpbmc = (LPBITMAPCOREHEADER)lpDIB; // 返回DIB中图像的宽度
    if (IS_WIN30_DIB(lpDIB))
    {
    // 对于Windows 3.0 DIB,返回lpbmi->biHeight
    return lpbmi->biHeight;
    }
    else
    {
    // 对于其它格式的DIB,返回lpbmc->bcHeight
    return (DWORD)lpbmc->bcHeight;
    }
    }
      

  2.   

    我又例子,给我你的mail,我给你代码