Использование LoadBitmap не сохраняет альфа-канал в изображении - PullRequest
0 голосов
/ 14 июля 2011

Я пытаюсь загрузить некоторые изображения из неуправляемого файла и сталкиваюсь с проблемами из-за отсутствия альфы.Я обнаружил, что могу восстановить альфа-канал, выполнив следующие действия:

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-битным изображением с альфа-каналом.Как я могу загрузить эти изображения как 32-битные изображения с неповрежденным альфа-каналом?Есть ли неуправляемый способ справиться с этим вместо того, чтобы полагаться на класс C # Bitmap?

1 Ответ

0 голосов
/ 15 июля 2011

ОК, я знаю, что класс Image (класс Bitmap является подклассом) не поддерживает альфа-прозрачность растрового изображения (вместо них предлагается использовать PNG или GIF).Плохая новость заключается в том, что вам придется создать свой собственный загрузчик bmp или найти его там (тот, который я использовал в мои дни на C ++, кажется уже мертвым или ушел, или я бы дал ссылку на него).Хорошей новостью является то, что создать свой собственный довольно легко: Формат файла

...