很多图象处理的程序都是用视图文档类,
先打开一幅位图,再得到它的指针接着就可以处理了
我想用基于对话框的也一定能做吧
现在有一个问题
我用CBitmap的LoadBitmap加载了一幅资源位图24色
我想再用GetBitmapBits(DWORD dwCount,LPVOID lpBits)
得到这副图象的指针然后灰度化 结果却不对倒没有编译错误
这个lpBits指向的缓冲区包不包含bitmapinfo?
还是直接就是位图像素?
正确应该怎么写啊
新手
多指教
鞠躬!!!!!

解决方案 »

  1.   

    呵呵,客气了。
    你先用CFile把你那个资源位图加载
    然后偏移sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEAD)
    读到一个char*里面就会得到你图象的位图像素了另外:在  24  位格式中,图像中的每个象素都由存储为  BRG  的三字节  RGB  序列表示。每个扫描行都被补足到  4  位。为了使这个过程稍复杂一点,图像是自底而上存储的,即第一个扫描行是图像中的最后一个扫描行。下图显示了标头  (BITMAPHEADER)  和  (BITMAPINFOHEADER)  以及部分图像。各个部分由垂线分隔:    
     
    0000000000  4D42  B536  0002  0000  0000  0036  0000    ¦  0028  
    0000000020  0000  0107  0000  00E0  0000  0001  0018  0000  
    0000000040  0000  B500  0002  0EC4  0000  0EC4  0000  0000  
    0000000060  0000  0000  0000    ¦  FFFF  FFFF  FFFF  FFFF  FFFF  
    0000000100  FFFF  FFFF  FFFF  FFFF  FFFF  FFFF  FFFF  FFFF
      

  2.   

    回EnochShen:
    精彩啊
    不过后半截没看明白  汗颜!
    CFile
    偶看过了
    基本明白
    先用CFile::Open(LPCTSTR lpszFileName,UNIT nOpenFlag,CFileException *pError)
    打开一个文件
    再用CFile::Read(void *c ,UNIT nCount)读取字节
    在lpBuf指向的缓冲区偏移sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEAD)就是像素
    是这样吧  没调试
    不过应用CFile类至少要知道文件名啊
    可是资源只有ID啊  我想能不能就用CBitmap类的GetBitmapBits(DWORD dwCount,LPVOID lpBits)函数lpBits指向的缓冲区偏移sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEAD)也应该是像素了马上调试去!谢拉
    明天见