GetDIBits:尝试修改位图,但不确定如何去做?我尝试了lpvBits,但它在“猪”区域的比较中崩溃了。我该怎么做? THX
LPVOID lpvBits=NULL; // pointer to bitmap bits array
BITMAPINFO bi;
ZeroMemory(&bi.bmiHeader, sizeof(BITMAPINFOHEADER));
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
if (!GetDIBits(dc, m_bmp, 0, 400, lpvBits, &bi, DIB_RGB_COLORS))
AfxMessageBox("1");
char *pig = (char*)lpvBits;
for (int m=0;m<100;m++)
{
if (pig[m] > 100)
{
pig[m] = 250;
}
}
SetDIBits( dc, m_bmp, 0, 400, (void *)pig, &bi, DIB_RGB_COLORS );
答案 0 :(得分:1)
http://msdn.microsoft.com/en-us/library/dd144879(v=vs.85).aspx
lpvBits [out] 指向缓冲区以指示接收位图数据的指针。如果此参数为NULL,则该函数将位图的维度和格式传递给lpbi参数指向的BITMAPINFO结构。
示例在此处找到: http://msdn.microsoft.com/en-us/library/dd183402(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/ms969901.aspx
答案 1 :(得分:0)
仔细阅读GetDIBits的文档 - 不会返回lpvBits指针 - 您需要为要获取的位图数据分配足够的内存,并将其传递给GetDIBits以使用图像数据填充它。