读书人

GetDIBits 函数缓冲区大小疑点

发布时间: 2013-03-21 10:08:17 作者: rapoo

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

读书人网 >VC/MFC

热点推荐