Windows Mobile (MFC). Как конвертировать изображение с альфа-каналом из CImageList в CBitmap? - PullRequest
0 голосов
/ 16 февраля 2012

Я создал подкласс CBitmapButton, чтобы создать собственную кнопку с переопределенной функцией DrawItem. Вот код из него, и он работает:

CDC *pDC = &dc;
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap m_Bmp;
m_Bmp.LoadBitmap(IDB_ARROW);
CBitmap *temp = memDC.SelectObject(&m_Bmp);
BLENDFUNCTION blend;
blend.BlendOp = AC_SRC_OVER;
blend.BlendFlags = 0;
blend.AlphaFormat = AC_SRC_ALPHA;
blend.SourceConstantAlpha = 255;
AlphaBlend(pDC->m_hDC, pt.x, pt.y, 85, 85, memDC.m_hDC, 0, 0, 85, 85, blend);
dc.SelectObject(&temp);

Проблема в том, что все изображения уже загружены и сохранены в CImageList. И я не знаю, как их конвертировать.

Возможно, что-то не так в создании CImageList: m_LargeImg.Create (365, 85, ILC_COLOR32, 4, 0);

    ImageWork::get().addBitmapToList(IDB_MAIN_MENU_ICON1, &m_LargeImg);
    ImageWork::get().addBitmapToList(IDB_MAIN_MENU_ICON2, &m_LargeImg);
    ImageWork::get().addBitmapToList(IDB_MAIN_MENU_ICON3, &m_LargeImg);
    ImageWork::get().addBitmapToList(IDB_MAIN_MENU_ICON4, &m_LargeImg);

1 Ответ

0 голосов
/ 16 февраля 2012

Ну, может быть, вам не следует пытаться конвертировать их. Если вы просто хотите сканировать их, попробуйте использовать одну из функций рисования списка изображений, таких как CImageList :: DrawIndirect, которая поддерживает альфа-смешивание и тому подобное. Это может быть единственное, что вам нужно.

...