[問題] 請問如何將一塊記憶體綁定在HBITMAP

看板C_and_CPP (C/C++)作者 (啤酒肚)時間15年前 (2011/01/13 16:11), 編輯推噓0(008)
留言8則, 1人參與, 最新討論串1/1
現在做法是這樣: 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

01/13 21:42, , 1F
如果我對 MSDN 的說明沒有理解錯誤的話, programmer 應該是
01/13 21:42, 1F

01/13 21:43, , 2F
沒有辦法自行宣告 HBITMAP 所要用的記憶體,我們能做的頂多
01/13 21:43, 2F

01/13 21:47, , 3F
是在產生 bitmap 的同時根據另一塊記憶體 (bits) 來初始化
01/13 21:47, 3F

01/13 21:49, , 4F
這個 bitmap 以形成所想要的圖,CreateDIBitmap 即是此類
01/13 21:49, 4F

01/13 21:51, , 5F
函數的其中之一,其第四個參數就是用來初始化 bitmap 的資料
01/13 21:51, 5F

01/13 21:57, , 6F
此外,用來初始化 bitmap 的資料其格式跟第五個參數有關,
01/13 21:57, 6F

01/13 22:00, , 7F
不是直接 長 * 寬 * 色彩深度 就行了,而且還有對齊 WORD
01/13 22:00, 7F

01/13 22:01, , 8F
資料寬度的規則,建議還是去看看 MSDN 的說明。
01/13 22:01, 8F
文章代碼(AID): #1DBhFBX4 (C_and_CPP)
文章代碼(AID): #1DBhFBX4 (C_and_CPP)