Извлечение CBitmap из CImageList - PullRequest
0 голосов
/ 20 января 2010

Я вставил растровые изображения в CImageList в одну функцию, и мне нужно было изменить некоторые изображения позже в другой функции. Но я не могу извлечь CBitmap. Код выглядит примерно так:

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

Однако все, что я получаю, это черный экран. Может ли кто-нибудь указать, где я иду не так?

Ответы [ 2 ]

7 голосов
/ 20 января 2010

Хорошо, в вашем коде есть ряд ошибок

1) Вы передаете список изображений по объектам, что означает, что он скопирует их. Передача по ссылке - гораздо лучший план.
2) Вы не передаете указатель на структуру IMAGEINFO в GetImageInfo.
3) Вы неправильно понимаете, как работает «FromHandle». FromHandle - это статическая функция, которая возвращает указатель на растровое изображение. В своем коде вы вызываете функцию, а затем игнорируете возвращенную CBitmap * и возвращаете копию вновь созданного объекта (т.е. он ничего не содержит), что приводит к вашему черному экрану.

Учитывая все это, вы должны иметь код, который выглядит следующим образом:

CBitmap* GetIndividualBitmap(CImageList& oImgList, int nBmpNo) 
{
    IMAGEINFO imgInfo;
    oImgList.GetImageInfo( nBmpNo, &imgInfo );
    return CBitmap::FromHandle( imgInfo.hbmImage );
}
0 голосов
/ 20 января 2010

Поиск Google по "CImageList Get Bitmap" произвел http://www.codeguru.com/forum/archive/index.php/t-257564.html и http://www.codeproject.com/KB/graphics/getimagefromlist.aspx, оба из которых выглядят именно так, как вы ищете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...