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

jon*_*ham 13 alpha file bitmap bmp

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

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

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

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

dns*_*dns 13

你可以使用PixelFormer.

如果在UpdateLayeredWindow()LoadImage()上使用ULW_ALPHA,则该函数需要BMP文件需要是32位BGRA (具有预乘AlphaDown-Top行顺序),而不是该函数不能正确显示位图.

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

  1. 打开PixelFormer并单击File> New:

在此输入图像描述

  1. 然后文件>导出

在此输入图像描述

PS:

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

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

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


alb*_*ert 9

pixelformer说它可以做到这一点http://www.qualibyte.com/pixelformer/#color_depths


小智 5

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