WPF缩略图图像模糊

时间:2019-04-22 20:50:39

标签: c# wpf

我有一个 WPF 应用,该应用将缩略图图像另存为 png 。代码工作得很好,但是当我打开图像时,图像非常模糊。它捕获的图像来自画布本身。画布根据我加载的图像更改其宽度和高度。所需的缩略图大小将为 200 x 200 像素)。

这是我的代码

    public void CreateThumbail(Canvas canvas, string filename)
    {
      RenderTargetBitmap rtb = new RenderTargetBitmap(
        (int)canvas.ActualWidth,
        (int)canvas.ActualHeight,
        96, //dip X
        96, //dpi Y
        PixelFormats.Pbgra32);
      rtb.Render(canvas);

      PngBitmapEncoder pngImage = new PngBitmapEncoder();

      pngImage.Frames.Add(CreateResizedImage(rtb, 200, 200, 0));
      using (var filestream = System.IO.File.Create(filename))
      {
        pngImage.Save(filestream);
      }
    }

    private static BitmapFrame CreateResizedImage(ImageSource source, int width, int height, int margin)
    {
      var rect = new Rect(margin, margin, width, height);

      var group = new DrawingGroup();
      RenderOptions.SetBitmapScalingMode(group, BitmapScalingMode.HighQuality);
      group.Children.Add(new ImageDrawing(source, rect));

      var drawingVisual = new DrawingVisual();
      using (var drawingContext = drawingVisual.RenderOpen())
        drawingContext.DrawDrawing(group);

      var resizedImage = new RenderTargetBitmap(
          (int)rect.Width, (int)rect.Height,// Resized dimensions
          96, 96, // Default DPI values
          PixelFormats.Pbgra32); // Default pixel format
      resizedImage.Render(drawingVisual);

      return BitmapFrame.Create(resizedImage);
    }

在保存图像之前,我没有将其调整大小,因此图像看起来清晰锐利。但是当我保存缩略图时,它又丑又模糊。我究竟做错了什么?我是在过度设计吗?预先非常感谢。

1 个答案:

答案 0 :(得分:2)

可能您需要考虑图像的原始尺寸。例如,尺寸为400x400的图像可以很好地缩小为200x200,而尺寸为235x235的图像则不会。

这不考虑开头不是正方形的图像。

您可以尝试反复降低图像的高度和宽度(我将减半),直到图像小于200x200,然后用白色或透明填充。

图像处理可能非常困难。我也不是专家,因此我可能会尝试在Google上找到这样的第三方库:https://imageprocessor.org/