首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

GetDIBits 函数缓冲区大小疑点

2013-03-21 
GetDIBits 函数缓冲区大小问题?本帖最后由 VisualEleven 于 2013-03-18 09:54:21 编辑tagBITMAPINFO bibi

GetDIBits 函数缓冲区大小问题?
本帖最后由 VisualEleven 于 2013-03-18 09:54:21 编辑

tagBITMAPINFO bi;
bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
bi.bmiHeader.biWidth = w;
bi.bmiHeader.biHeight = h;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = 8;
bi.bmiHeader.biCompression = 0;
bi.bmiHeader.biSizeImage = 0;
//CreateDIBSection(dc, &bi, DIB_RGB_COLORS, &buf, 0, 0);

GetDIBits(dc, bm, 0, h, buf, &bi, DIB_RGB_COLORS);

请问各位 这里的buf 应该是多大?    这个buf 跟 bi.bmiHeader.biBitCount的关系是什么?

如果是16位的 如何压缩这个图片 缩小 buf?

希望能有前辈解答。。。  求助
[解决办法]
buf的大小 = 每一行的数据大小*高度。

记住,DIB位图每一行的所需的字节数是按4字节对齐的。
如果是8位位图话,则为:
(width*8 + 31)/32

那么buf的总大小,就是:
(width*8 + 31)/32 * height
[解决办法]
BUF大小是可以算出来的啊。简单说是图片的宽*高*每个像素的字节数
由于位图是宽度4字节对齐,所以就需要
(width*biBitCount + 31)/32 * height

热点排行