2016-11-26 338 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

因为您正在调整图像大小,所以得到两种以上的颜色。这将添加一个alpha通道,这将导致很多半透明像素。如果你想回到2种颜色,你应该改变图像的颜色类型为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

感谢您的答复,但我得到的输出是黑白图像,而我的原始图像有颜色。 –