У меня есть данные изображения в буфере (тип - длинный) со сканера, который является 32-битным.
Например, соответствующее значение пикселя буфера [0] равно 952, что составляет [184, 3, 0, 0] <- [R, G, B, A]; </p>
Я хочу отобразить / нарисовать / нарисовать на экране; Я запутался, когда попытался прочитать о растровых изображениях. Я посмотрел на функции win32, класс CBitmap, формы окон (графическое окно) и т. Д. Мне трудно понять общую идею / аппроксимацию отображения этих данных буфера в окне приложения.
Я построил BITMAPFILEHEADER И BITMAPINFOHEADER; Содержит данные пикселей в буфере (без знака char *) vInBuff, размер которого равен vImageSz;
//construct the BMP file Header
vBmfh.bfType = 19778;
vBmfh.bfSize = 54+vImageSz;//size of the whole image
vBmfh.bfReserved2 = 0;
vBmfh.bfReserved1 = 0;
vBmfh.bfOffBits = 54;//offset from where the pixel data can be found
//Construct the BMP info header
vBmih.biSize = 40;//size of header from this point
vBmih.biWidth = 1004;
vBmih.biHeight = 1002;
vBmih.biPlanes = 1;
vBmih.biCompression = BI_RGB;
vBmih.biSizeImage = vBmih.biWidth*vBmih.biHeight*4;
vBmih.biBitCount = 32;
vBmih.biClrUsed = 0;
vBmih.biClrUsed = 0;
1.Что я должен делать дальше, чтобы отобразить это?
2 Что я должен использовать для отображения 32-битного растрового изображения? Я вижу людей, использующих функции createwindows, формы Windows, MFC и т. Д .;
3. Я также понимаю, что используются BitBlt, createDIBSection, OnPaint и т. Д.? Я смущен этими различными функциями и платформами кодирования? Пожалуйста, предложите мне простой подход.
4.Как я могу создать палитру для отображения 32-битного изображения?
Спасибо
Raj
EDITED ПЫТАЯСЬ СОДЕРЖАТЬ ДАЙВ ПОДХОД, МОЖЕТ КТО-ТО КОММЕНТАРИЙ НА МОЕ РЕАЛИЗАЦИЮ. Я не мог продолжать битблт, так как у меня нет двух HDC, я не знаю, как получить этот? Любая помощь, пожалуйста
DisplayDataToImageOnScreen(unsigned char* vInBuff, int vImageSz) // buffer with pixel data, Size of pixel data
{
unsigned char* vImageBuff = NULL;
HDC hdcMem=CreateCompatibleDC(NULL);
HBITMAP hBitmap = CreateDIBSection(hdcMem,
(BITMAPINFO*)&vBmih,
DIB_RGB_COLORS,
(void **)&vImageBuff,
NULL, 0);
GetDIBits(hdcMem,
hBitmap,
0,
1,
(void**)&vImageBuff,
(BITMAPINFO*)&vBmih,
DIB_RGB_COLORS);
memcpy(vImageBuff,vInBuff,vImageSz);
}