作者DrStein (啤酒肚)
看板C_and_CPP
標題[問題] 請問如何將一塊記憶體綁定在HBITMAP
時間Thu Jan 13 16:11:52 2011
現在做法是這樣:
HBITMAP hbitmap;
BITMAPINFO* bmI;
BITMAPINFOHEADER* bmIH;
:
hbitmap = CreateDIBSection( memDC.GetSafeHdc(), bmI, DIB_RGB_COLORS,
(void**)&pRenderData, 0, 0);
接下來就selectObject..等
這是沒有問題的
但CreateDIBSection會自己開一塊記憶體,不是很好
想自己管理這塊,請問要怎作呢?
試了
winWidth = bmIH->biWidth ;
winHeight = -winHeight;
pRenderData = (char*)malloc(winWidth*winHeight*PIXELSIZE3);
memset(pRenderData, 100, winWidth*winHeight*PIXELSIZE3);
hbitmap = CreateDIBitmap( memDC.GetSafeHdc(), bmIH, CBM_INIT, pRenderData,
bmI, DIB_RGB_COLORS);
SetDIBits( memDC.GetSafeHdc(), hbitmap, 0, winHeight,
pRenderData, bmI, DIB_RGB_COLORS);
圖還是全黑的啊。
那請問要怎修改才能讓圖正常顯示呢?
謝謝 。。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.158.204
→ uziel:如果我對 MSDN 的說明沒有理解錯誤的話, programmer 應該是 01/13 21:42
→ uziel:沒有辦法自行宣告 HBITMAP 所要用的記憶體,我們能做的頂多 01/13 21:43
→ uziel:是在產生 bitmap 的同時根據另一塊記憶體 (bits) 來初始化 01/13 21:47
→ uziel:這個 bitmap 以形成所想要的圖,CreateDIBitmap 即是此類 01/13 21:49
→ uziel:函數的其中之一,其第四個參數就是用來初始化 bitmap 的資料 01/13 21:51
→ uziel:此外,用來初始化 bitmap 的資料其格式跟第五個參數有關, 01/13 21:57
→ uziel:不是直接 長 * 寬 * 色彩深度 就行了,而且還有對齊 WORD 01/13 22:00
→ uziel:資料寬度的規則,建議還是去看看 MSDN 的說明。 01/13 22:01