我一直試圖在8bpp灰度位圖上繪製沒有成功。這是我的一些嘗試。也許有人可以指出我做錯了什麼。使用8bpp灰度位圖(非託管C++)
============================================== =====
嘗試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顏色。實際上,我沒有分配給這個成員編譯! (他們可能會使它更復雜!?)
任何建議,將不勝感激!謝謝!
============================================== =====
您是否試過GDI +?或者有任何業務不需要? – 2010-06-29 15:47:22
我將我在GDI +中的工作示例轉換爲非託管C++/GDI以提高速度。在GDI中獲取8bpp位圖非常困難。 – user20493 2010-06-29 16:02:26
GDI +不受管理。這是一個建立在win32上的C++庫。託管將是WinForms或WPF。 – Cogwheel 2010-06-29 16:11:37