У меня есть указатель на изображение, полученное с камеры, используя сторонний SDK.Изображение одной полосы (Mono 8).Я хочу вывести его как растровое изображение в окно winAppi.Что я делаю, это
HBITMAP hBitmap = NULL;
BITMAPINFOHEADER bmih;
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biWidth = 1280;
bmih.biHeight = 960;
bmih.biPlanes = 1;
bmih.biBitCount = 8;
bmih.biCompression = BI_RGB;
bmih.biSizeImage = 0;
bmih.biXPelsPerMeter = 0;
bmih.biYPelsPerMeter = 0;
bmih.biClrUsed = 0;
bmih.biClrImportant = 0;
BITMAPINFO dbmi;
ZeroMemory(&dbmi, sizeof(dbmi));
dbmi.bmiHeader = bmih;
dbmi.bmiColors->rgbBlue = 0;
dbmi.bmiColors->rgbGreen = 0;
dbmi.bmiColors->rgbRed = 0;
dbmi.bmiColors->rgbReserved = 0;
void* bits = &aquiredImageCPU.m_sMemory.ptr()[0];
hBitmap = CreateDIBitmap(dc, &bmih, CBM_INIT, bits, &dbmi, DIB_RGB_COLORS);
src = CreateCompatibleDC(dc);
SelectObject(src, hBitmap);
BitBlt(dc, 10,10,512, 512, src, 0, 0, SRCCOPY);
Если я вывожу изображение в виде матрицы и предварительно с помощью моей библиотеки (библиотеки, в которой я использую imsave, аналогичную matlabs imsave), я вижу, что изображение в порядке (изображение в градациях серого),Но когда я вывожу его в окно winAppi, оно преобразуется в RGB.Я думаю, что это имеет отношение к
HDC dc = GetDC(hwnd);
src = CreateCompatibleDC(dc);
Есть предложения?Спасибо
То, что я сделал в похожем случае, - это брать каждые 8 битов и копировать их еще 2 раза после фрагмента из 8 битов.Это работает, но это дорого, и мне нужно настоящее приложение для плиток.
auto outputImageHight = 1280;
auto outputImageWidth = 960;
unsigned char *myArray = new unsigned char[3 * outputImageHight * outputImageWidth];
for (int i = 0; i < outputImageHight; i++)
for (int j = 0; j < outputImageWidth; j++)
{
unsigned char ucTmp = (unsigned char)(image(i, j));
myArray[3 * (i + outputImageHight * j) + 0] = ucTmp;
myArray[3 * (i + outputImageHight * j) + 1] = ucTmp;
myArray[3 * (i + outputImageHight * j) + 2] = ucTmp;
}