GetDIBits:位图修改,但崩溃了?

时间:2011-10-22 00:03:07

标签: visual-c++ bitmap

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 ); 

2 个答案:

答案 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

http://www.codeproject.com/KB/graphics/drawing2bitmap.aspx

http://www.cplusplus.com/forum/general/28469/

答案 1 :(得分:0)

仔细阅读GetDIBits的文档 - 不会返回lpvBits指针 - 您需要为要获取的位图数据分配足够的内存,并将其传递给GetDIBits以使用图像数据填充它。