GetDIBits: растровые модификации, но вылетает? - PullRequest
0 голосов
/ 22 октября 2011

GetDIBits: пытаетесь изменить растровое изображение, но не знаете, как это сделать? Я пробовал lpvBits, но он вылетает при сравнении в области "свинья". Как мне это сделать? ТНХ

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 ]

1 голос
/ 22 октября 2011

http://msdn.microsoft.com/en-us/library/dd144879(v=vs.85).aspx

lpvBits [out] Указатель на буфер для получения растровых данных. Если этот параметр имеет значение NULL, функция передает размеры и формат растрового изображения в структуру BITMAPINFO, на которую указывает параметр lpbi.

пример найден здесь: 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 голосов
/ 22 октября 2011

Внимательно прочитайте документацию по GetDIBits - указатель lpvBits вам не возвращается - вам нужно выделить достаточно памяти для растровых данных, которые вы хотите получить, и передать их в GetDIBits, чтобы заполнить их данными изображения.

...