是否可以在MFC的CToolBar控件上显示带alpha通道的32位图像?目前,我的工具栏使用的是4位图像,该图像由Visual Studio 2010中的“Filename”属性分配给它。
提前致谢!
答案 0 :(得分:2)
迟到的答案,但我遇到了同样的问题,以防其他人正在寻找解决方案:
具有8位alpha的32位图像将开箱即用,至少在XP和更新版本上。您需要32位alpha BMP格式的BMP文件,许多应用程序无法正确保存。我的方法是首先生成PNG图像,然后使用这个小工具将它们转换为32位BMP:https://github.com/thomerow/png2bmp32
一旦有了这样的文件,它就可以使用toolbar.LoadBitmap(...)
加载而不会出现问题。
如果您正在使用工具栏的图像列表,或者如果您想使用图像列表在其他控件(如树视图)中显示图标,请按以下方式加载图像:
CBitmap bitmap;
bitmap.LoadBitmap(...);
imageList.Create(WIDTH_OF_ICONS, HEIGHT_OF_ICONS, ILC_COLOR32, NUMBER_OF_IMAGES, 1);
imageList.Add(&bitmap, RGB(255, 0, 255)); // Color key isn't important.
bitmap.Detach();
希望这有帮助!
编辑:我注意到"简单"LoadBitmap()
在某种程度上没有在64位版本中工作。我使用上述图像列表的方法与toolbar.GetToolBarCtrl().SetImageList(&imageList);
结合使用。
答案 1 :(得分:1)
您可以使用带有Alpha通道的32位图像,使用CMFCToolbar而不是CToolbar。此类位于MFC 2008 Feature Pack(VS2008 SP1)中,已包含在VS2010中。但是,你不仅需要升级工具栏,还需要升级其他一些东西(CWinApp到CWinAppEx等)。看看this。
答案 2 :(得分:0)
你看过this了吗?这个人从CToolBar派生了一个类,可以使用32位颜色。我希望这对你来说已经足够了。
答案 3 :(得分:0)
我有一个类似的问题。问题的原因是位图版本。所需的版本是版本3 bmp v3 bmp wiki。但是v3默认设置为24位深度,其中不包括Alpha通道。
我使用meatadata2go.com检查了bmp文件的元数据。
然后,我可以使用imagemagick来生成具有32位深度的v3 bmp,并保持alpha透明度。
我使用的命令是:
magick convert png_asset_name.png -define bmp3:alpha=on bmp3:new_bmp_asset_name.bmp