Почему мое преобразование в Magick.NET приводит к черному файлу PCX?

У меня есть следующий .png-file

который я хочу преобразовать с помощью Magick.NET в файл.pcx. Я использую следующий код для преобразования:

using System.Drawing;
using using ImageMagick;

using (var bitmap = (Bitmap) Bitmap.FromFile("ptOHf.png"))
using (var magickImage = new MagickImage(bitmap))
{
  magickImage.Format = MagickFormat.Pcx;
  magickImage.ColorType = ColorType.Palette;
  magickImage.ColorSpace = ColorSpace.Gray;

  magickImage.Write("C:\\somefile.pcx");
}

Это приводит к следующему выводу:

Используемый пакет: https://www.nuget.org/packages/Magick.NET-Q8-AnyCPU/7.0.1.500 (Net40)

1 ответ

Решение

Я на самом деле не говорю .NETДирк (@dlemstra) - человек для этого, но проблема в том, что вся (белая) информация на самом деле находится в альфа-слое, а само базовое изображение просто сплошное черное, и ImageMagick сделал это правильно, как PCX не может сделать прозрачность.

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

convert https://stackru.com/images/2e2457ec784b8f9e8c51847f540bc836363797b4.png -alpha extract a.jpg

В командной строке вы должны создать учетную запись ImageMagick для альфа-слоя, используя -flatten

convert https://stackru.com/images/2e2457ec784b8f9e8c51847f540bc836363797b4.png -flatten result.pcx

Я понятия не имею, но я думаю, в .NET, вы бы сделали что-то вроде:

using (var magickImage = new MagickImage(bitmap))
{
  magickImage.Flatten();
  magickImage.Format = MagickFormat.Pcx;
  magickImage.ColorType = ColorType.Palette;
  magickImage.ColorSpace = ColorSpace.Gray;
}
Другие вопросы по тегам