【问题标题】:Windows Mobile (MFC). How convert an image with alpha-channel from CImageList to CBitmap?Windows 移动 (MFC)。如何将具有 alpha 通道的图像从 CImageList 转换为 CBitmap?
【发布时间】:2012-03-07 22:21:58
【问题描述】:

我对 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);

【问题讨论】:

    标签: mfc windows-mobile alpha blend blending


    【解决方案1】:

    好吧,也许您不应该尝试转换它们。如果您只想抓取它们,请尝试使用支持 Alpha 混合等的 CImageList::DrawIndirect 之类的图像列表绘制函数之一。这可能是您唯一需要的。

    【讨论】:

    • 它对我不起作用。可能是因为 Winmobile 的 MFC 被修剪(DrawIndirect 有 9 个参数而不是 12 个)。那你能举个具体的例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2014-10-26
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多