2010-01-20 37 views
1

我在一個函數中插入了CImageList中的位圖,並需要稍後在另一個函數中更改某些圖像。但我無法提取CBitmap。代碼是這樣的:從CImageList中獲取CBitmap

CBitmap GetIndividualBitmap(CImageList oImgList, int nBmpNo) 
{ 
    IMAGEINFO imgInfo; 
    imagelist.GetImageInfo(index,imgInfo); 
    CBitmap bmp; 
    bmp.FromHandle(imgInfo.hbmImage); 
    return bmp; 
} 

但是我得到的只是一個黑屏。任何人都可以請指出我要去哪裏錯了?

回答

1

谷歌搜索「CImageList獲取位圖」製作的http://www.codeguru.com/forum/archive/index.php/t-257564.htmlhttp://www.codeproject.com/KB/graphics/getimagefromlist.aspx這兩者似乎正是你在找什麼?

+0

我知道。但我試圖找出我的代碼有什麼問題。 – 2010-01-20 13:18:50

+1

根據HBITMAP返回的第一個鏈接是整個原始位圖 - 您需要選擇它的圖像部分,它是您想要的圖像,位於imgInfo.rcImage;我無法準確地告訴你爲什麼你的當前位圖在渲染時全是黑色的 - 但我會猜測它不是屏幕直接兼容的位圖。因此,這兩個鏈接的例子中的代碼只是將您需要的部分複製到兼容的位圖中。 – Ruddy 2010-01-20 15:20:54

6

確定有你的代碼

1)你是路過對象的圖像列表,這意味着它會跨越複製它的一些誤區。通過引用傳遞是一個更好的計劃。
2)您沒有將指向IMAGEINFO結構的指針傳遞給GetImageInfo。
3)你誤解了「FromHandle」是如何工作的。 FromHandle是一個靜態函數,它返回一個指向Bitmap的指針。在你的代碼中,你正在調用函數,然後忽略CBitmap *返回並返回一個新構造的對象(即它不包含任何內容)的副本,從而導致黑屏。

把所有這些考慮,你應該有代碼看起來像這樣:

CBitmap* GetIndividualBitmap(CImageList& oImgList, int nBmpNo) 
{ 
    IMAGEINFO imgInfo; 
    oImgList.GetImageInfo(nBmpNo, &imgInfo); 
    return CBitmap::FromHandle(imgInfo.hbmImage); 
} 
+1

全部非常真實。但是,我相信你仍然需要獲取位圖的正確部分,如上面我的評論所示。 – Ruddy 2010-01-20 16:11:21