使用LoadBitmap不会在图像中保留Alpha通道

时间:2011-07-13 20:04:12

标签: c# alpha

我正在尝试从非托管文件中加载一些图像,并遇到alpha版本无法通过的问题。我发现我可以通过这样做恢复alpha通道:

BitmapData bmData = 
    bmpSource.LockBits(
        new Rectangle(0, 0, bmpSource.Width, bmpSource.Height),
        ImageLockMode.ReadOnly, bmpSource.PixelFormat);

Bitmap dstBitmap = 
    new Bitmap(bmData.Width, bmData.Height, bmData.Stride,
    PixelFormat.Format32bppArgb, bmData.Scan0);

bmpSource.UnlockBits(bmData);

当桌面设置为32位颜色时效果很好,但由于某些原因,当桌面设置为16位颜色时,bmpSource只是一个16位彩色图像,即使资源文件中的源图像实际上是32位图像使用alpha通道。如何将这些图像作为32位图像加载,alpha通道完好无损?是否有一种非托管方式来处理这个而不是依赖于C#Bitmap类?

1 个答案:

答案 0 :(得分:0)

好的,我知道Image类(Bitmap类是其子类)不支持Bitmap alpha透明度(他们建议使用PNG或GIF代替)。坏消息是你将不得不创建自己的bmp加载器或在那里找到一个(我在C ++时代使用的那个似乎已经死了,现在已经消失或者我已经链接到它)。好消息是创建自己的:File Format

非常容易