2016-06-01 2 views
1

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

, который я хочу, чтобы преобразовать с 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"); 
} 

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

Пакет используется: Magick.NET-Q8-AnyCPU 7.0.1.500 (Net40)

+0

Попробуйте добавить 'flatten' после открытия, так как белые в вашем изображении фактически находятся в альфа-слое, а не в цветовом слое. Ваше изображение на самом деле полностью черное, вся информация находится в альфа-слое. –

+0

@MarkSetchell oh, отлично поймать - я попробую это - не могли бы вы предоставить какой-то код в качестве ответа (я бы хотел дать вам несколько моментов для этого открытия) :) –

ответ

1

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

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

convert http://i.stack.imgur.com/ptOHf.png -alpha extract a.jpg 

enter image description here

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

convert http://i.stack.imgur.com/ptOHf.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; 
} 
+0

fyi: Я провел некоторое исследование, и самая простая версия для получения этой работы является 'magickImage.ColorAlpha (MagickColors.White);' - но ваш вход полностью спас мой бекон сегодня - спасибо! –