Добрый день,
Подскажите плз, что делаю не так - хочу выводить на экран grayscale изображение, но как только раскоментирую цикл LUT сразу получаю вылет приложения. Как-будто обращаюсь в невыделенную память?!
Код |
unsigned char* ptr; ptr = (unsigned char*)malloc( 300 * 300); BITMAPINFO bmi; ZeroMemory(&bmi, sizeof(BITMAPINFO)); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biBitCount = 8; bmi.bmiHeader.biClrUsed = 0; bmi.bmiHeader.biHeight = 300; bmi.bmiHeader.biWidth = 300; bmi.bmiHeader.biSizeImage = 300*300; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biCompression = BI_RGB; //ZeroMemory(bmi.bmiColors, sizeof(RGBQUAD)); /* for(int i=0; i<256; i++) { bmi.bmiColors[i].rgbRed = i; bmi.bmiColors[i].rgbGreen = i; bmi.bmiColors[i].rgbBlue = i; bmi.bmiColors[i].rgbReserved = 0; } */ HDC dc = CreateCompatibleDC((HDC)mPictureBox.GetDC()); HBITMAP hbitmap = CreateDIBSection(dc, &bmi, DIB_RGB_COLORS, (void**)&ptr, NULL, 0); for (int i=0; i<300*300; i++) ptr[i] = rand()%255; SetDIBits(dc, hbitmap, 0, 300, ptr, &bmi, DIB_RGB_COLORS ); mPictureBox.SetBitmap(hbitmap); //mPictureBox.RedrawWindow(); //free(ptr)
|
Добавлено через 7 минут и 10 секунд не понял почему, но обошел вот так:
Код | unsigned char* ptr; ptr = (unsigned char*)malloc( 300 * 300);
BITMAPINFO bmi; LPBITMAPINFO info; info = (LPBITMAPINFO) malloc(sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD)); //ZeroMemory(&bmi, sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD)); info->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); info->bmiHeader.biBitCount = 8; info->bmiHeader.biClrUsed = 0; info->bmiHeader.biHeight = 300; info->bmiHeader.biWidth = 300; info->bmiHeader.biSizeImage = 300*300; info->bmiHeader.biPlanes = 1; info->bmiHeader.biCompression = BI_RGB; //ZeroMemory(bmi.bmiColors, sizeof(RGBQUAD)); for(int i=0; i<256; i++) { info->bmiColors[i].rgbRed = i; info->bmiColors[i].rgbGreen = i; info->bmiColors[i].rgbBlue = i; info->bmiColors[i].rgbReserved = 0; } HDC dc = CreateCompatibleDC((HDC)mPictureBox.GetDC()); HBITMAP hbitmap = CreateDIBSection(dc, info, DIB_RGB_COLORS, (void**)&ptr, NULL, 0); for (int i=0; i<300*300; i++) ptr[i] = rand()%255; SetDIBits(dc, hbitmap, 0, 300, ptr, info, DIB_RGB_COLORS ); mPictureBox.SetBitmap(hbitmap); //mPictureBox.RedrawWindow();
//free (ptr);
|
|