一个关于CBitmap的小问题
很多图象处理的程序都是用视图文档类,
先打开一幅位图,再得到它的指针接着就可以处理了
我想用基于对话框的也一定能做吧
现在有一个问题
我用CBitmap的LoadBitmap加载了一幅资源位图24色
我想再用GetBitmapBits(DWORD dwCount,LPVOID lpBits)
得到这副图象的指针然后灰度化 结果却不对倒没有编译错误
这个lpBits指向的缓冲区包不包含bitmapinfo?
还是直接就是位图像素?
正确应该怎么写啊
新手
多指教
鞠躬!!!!!
问题点数:50、回复次数:2Top
1 楼EnochShen(小疯子:真的好菜—知耻而后勇!)回复于 2004-12-04 19:12:48 得分 50
呵呵,客气了。
你先用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 FFFFTop
2 楼asdwwe2004(xxx)回复于 2004-12-04 20:17:33 得分 0
回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)也应该是像素了
马上调试去!
谢拉
明天见
Top




