2016-11-26 9 views
3

Я пытаюсь изменить размер изображения с помощью Magick.Net. Но сжатое изображение имеет больший размер и бит-бит 32, когда исходное изображение имеет бит-бит 2. Я хочу сохранить или уменьшить битдот. Вот мой код.Изменение размера изображения в Magick.Net

  var imageMacig = new MagickImage(filePath); 
      //Percentage p = new Percentage(60); 
      //imageMacig.Threshold(p); // 60 is OK 
      imageMacig.VirtualPixelMethod = VirtualPixelMethod.Transparent; 
      imageMacig.Depth = 1; 
      imageMacig.FilterType = FilterType.Quadratic; 
      imageMacig.Transparent(MagickColor.FromRgb(0,0,0)); 
      imageMacig.Format = MagickFormat.Png00; 
      imageMacig.Resize(newWidth, newHeight); 
      imageMacig.Write(targetPath); 
      imageMacig.Dispose(); 
      originalBMP.Dispose(); 
+0

Почему вы сначала создать некий «образ», то из него вы создаете «originalBMP» и от того, в свою очередь, вы создаете MagickImage? Почему бы не создать MagickImage из файла напрямую? – Evk

+0

Я уже пробовал использовать другой метод перед использованием MagickImage. Сначала я использовал System.Drawing.Imaging, чтобы изменить размер, а затем использовал MagickImage. –

+0

Итак, сначала попробуйте полностью удалить ваши «образ» и «originalBMP» (и все, что с ними связано), и создайте MagickImage из файла. – Evk

ответ

3

Вы получаете более двух цветов, потому что вы изменяете размер изображения. Это добавит альфа-канал, и это приведет к получению полупрозрачных пикселей. Если вы хотите вернуться к 2 цветам, вы должны изменить ColorType изображения на BiLevel. И установка формата в MagickFormat.Png8 гарантирует, что ваше изображение будет записано в виде 2-битного png. Ниже приведен пример того, как вы могли бы сделать это:

using (var imageMagick = new MagickImage(filePath)) 
{ 
    imageMagick.Transparent(MagickColor.FromRgb(0,0,0)); 
    imageMagick.FilterType = FilterType.Quadratic; 
    imageMagick.Resize(newWidth, newHeight); 
    imageMagick.ColorType = ColorType.Bilevel; 
    imageMagick.Format = MagickFormat.Png8; 
    imageMagick.Write(targetPath); 
} 
+0

Спасибо за ответ, но результат, который я получил, был черно-белое изображение, в то время как у моего исходного изображения был цвет. –