很久以前写的,参阅一下吧http://dev.gameres.com/Program/Visual/Other/WhatIfBMPFormat.doc

解决方案 »

  1.   

    先LoadImage,再Attach,再GetDIBits就将像素颜色信息取在了一个数组中了。
    CBitmap *mClsBmp=NULL;
    HBITMAP mHdlBmp;
    BITMAP m_Bitmap;mClsBmp=new CBitmap();
    mHdlBmp=(HBITMAP)LoadImage(NULL,lpszPathName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_LOADFROMFILE);
    mClsBmp->Attach(mHdlBmp);
    mClsBmp->GetBitmap(&m_Bitmap);
    mClsBmp->Detach();UINT * pData = new UINT[m_Bitmap.bmWidth * m_Bitmap.bmHeight];
    BITMAPINFO bmpInfo;
    bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bmpInfo.bmiHeader.biWidth = m_Bitmap.bmWidth;
    bmpInfo.bmiHeader.biHeight = -m_Bitmap.bmHeight;
    bmpInfo.bmiHeader.biPlanes = 1;
    bmpInfo.bmiHeader.biCompression = BI_RGB;
    bmpInfo.bmiHeader.biBitCount = 32;HDC hDC = ::GetWindowDC(NULL);GetDIBits(hDC,mHdlBmp,0,m_Bitmap.bmHeight,pData,&bmpInfo,DIB_RGB_COLORS);
      

  2.   

    标准的BMP位图属于DIB,很简单直接CreateDIBSection(),获得指向象素区的指针,然后按照DIB的坐标进行读取写入就OK了,速度很快,而且还可以使用汇编优化。