4

是否可以在 MFC 的 CToolBar 控件上显示带有 alpha 通道的 32 位图像?目前,我的工具栏使用 4 位图像,该图像由 Visual Studio 2010 中的“文件名”属性分配给它。

提前致谢!

4

4 回答 4

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);.

于 2014-03-25T01:14:35.710 回答
1

您可以使用 CMFCToolbar 而不是 CToolbar 来使用具有 alpha 通道的 32 位图像。这个类在 MFC 2008 Feature Pack (VS2008 SP1) 中并且已经包含在 VS2010 中。但是你不仅需要升级工具栏,还需要升级其他一些东西(CWinApp 到 CWinAppEx 等)。看看这个

于 2012-05-24T06:26:10.550 回答
1

我有一个类似的问题。问题的原因是位图版本。所需的版本是版本 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
于 2020-08-05T15:56:48.443 回答
0

你看过这个吗?这家伙从 CToolBar 派生了一个可以使用 32 位颜色的类。我希望这对你来说已经足够了。

于 2012-05-23T15:12:06.320 回答