我有一个带Alpha的PNG图像,我需要将其转换为BMP才能加载到我的OpenGL应用程序中。但是,BMP对于32位只有一个选项,即XRBG,其中的“ X”只是用于填充目的的一个额外字节(4字节对齐)。

问题是如何利用这个“ X”字节来包含alpha通道,以便可以将BMP(32位XRGB)加载到具有透明像素的GL应用程序中?

也许我必须自己制作工具才能进行此转换?我需要的是RGBA,而不是“ XRGB”或“ ARGB”,我是否必须读取XRGB BMP文件并逐像素扫描以转换为RGBA?

如果必须进行转换,哪种方法是VC ++中最好的方法? 有可以制作透明BMP的软件吗?

有帮助吗?

解决方案

pixelformer表示可以做到这一点。

其他提示

您可以使用 PixelFormer

如果在 UpdateLayeredWindow() LoadImage()上使用 ULW_ALPHA ,该函数期望BMP文件需要为 32位BGRA (具有预乘Alpha 自上而下的行顺序),但该功能将无法正确显示位图。

您可以使用PixelFormer将PNG转换为BMP 32位BGRA(步骤2)。

  1. 打开PixelFormer,然后单击文件>新建:

    “输入图片说明此处“

    1. 然后选择“文件”>“导出”

      “输入图片说明此处“

      P.S。:

      Photoshop 在导出带有Alpha通道的bmp时已失去支持(它不能做预乘Alpha,Alpha通道值将变为0)。您将失去Alpha通道,但BGR值将正确加载。您仍然可以使用Photoshop,但必须在Alpha通道选项卡上手动绘制Alpha。 当您导出为bmp时,

      Gimp 的支持也遭到破坏。 LoadImage()将不会加载任何内容,并且您也看不到图像。我怀疑这个问题是由Gimp将BMP导出为自上而下的行顺序引起的。

      Visual Studio资源编辑器也可以选择创建/编辑32bpp BGR,但不支持Alpha通道

我曾经需要做同样的事情,并编写了一个小的命令行工具,可以在此处找到

开源软件- ImageMagick Gimp 也可以用于此图像转换。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top