如何将32位BMP转换为包含alpha通道?

时间:2011-09-10 04:38:19

标签: file bitmap alpha bmp

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

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

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

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

4 个答案:

答案 0 :(得分:11)

您可以使用PixelFormer

如果您在 UpdateLayeredWindow()&上使用 ULW_ALPHA LoadImage(),该函数期望BMP文件需要 32位BGRA (使用预乘Alpha & Down-Top行顺序),除此之外,该功能无法正确显示位图。

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

  1. 打开PixelFormer,然后点击文件>新:
  2. enter image description here

    1. 然后文件>导出
    2. enter image description here

      P.S:

      使用alpha通道导出bmp时,

      Photoshop 已经破坏了支持(它无法预乘alpha,alpha通道值将变为0)。您将丢失Alpha通道,但BGR值将正确加载。您仍然可以使用Photoshop,但必须在Alpha通道选项卡上手动绘制alpha。

      当您导出为bmp时,

      Gimp 也会破坏支持。 LoadImage()不会加载任何内容,也无法看到图像。我怀疑这个问题是由Gimp导出BMP导致自上而下的行顺序

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

答案 1 :(得分:8)

答案 2 :(得分:5)

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

答案 3 :(得分:0)

Opersource软件 - ImageMagic Gimp 也可用于此图片转换。