Я безуспешно пытался нарисовать растровое изображение в градациях серого 8 бит на пиксель. Вот некоторые из моих попыток. Может быть, кто-то может указать, что я делаю неправильно.
=============================================== ====
Попытка 1: создать, выбрать и нарисовать:
В конструкторе:
CBitmap bm;
bm.CreateBitmap (200, 200, 1, 8, NULL);
В OnDraw:
CDC *mdc=new CDC ();
HGDIOBJ tmp = mdc->SelectObject(bm);
Результат: tmp равен NULL, что указывает на ошибку.
=============================================== ====
Попытка 2: CreateDIBSection
В конструкторе:
HBITMAP hbm;
BITMAPINFOHEADER bih;
BITMAPINFO bi;
HANDLE hb;
CDC* myDc = new CDC ();
HDC hdc = myDc->GetSafeHdc ();
void* bits;
RGBQUAD rq [256];
initBi ();
hbm = CreateDIBSection (hdc, &bi, DIB_RGB_COLORS, &bits, NULL, 0);
...
void CEightBitDrawingView::initBi()
{
bih.biSize = sizeof (BITMAPINFOHEADER);
bih.biWidth = 200;
bih.biHeight = -200;
bih.biPlanes = 1;
bih.biBitCount = 8;
bih.biCompression = BI_RGB;
bih.biSizeImage = 0;
bih.biXPelsPerMeter = 14173;
bih.biYPelsPerMeter = 14173;
bih.biClrUsed = 0;
bih.biClrImportant = 0;
memset ((void *) rq, 0, 256 * sizeof (RGBQUAD));
bi.bmiHeader = bih;
bi.bmiColors = rq;
}
Результат: он даже не компилируется, потому что член BITMAPINFO bmiColors определен как:
RGBQUAD bmiColors [1];
, поэтому не будет принимать более одного цвета RGB. На самом деле, ничего, что я назначаю этому участнику, компилируется! (Могут ли они сделать это еще сложнее!?)
Любые предложения будут оценены! Спасибо!
=============================================== ====