2011-10-22 19 views
0

GetDIBits:試圖修改位圖,但不知道該怎麼去做?我嘗試了lpvBits,但在「豬」區域的比較中崩潰了。我應該怎麼做? THXGetDIBits:位圖修改,但崩潰了?

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

lpvBits爲空。調用GetDIBits()後,它仍然爲空。 KABOOM。 –

回答

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/

0

仔細閱讀的GetDIBits的文檔 - 的lpvBits指針不會返回到你 - 你需要爲你想獲取的位圖數據分配足夠的內存,並把它傳遞到的GetDIBits用圖像來填充它數據。