DecodePixelWidth Vs.有什么区别ScaleTransform?

时间:2015-01-26 19:11:08

标签: c# .net decode pixel scaletransform

我想从来自Stream的byte []图像制作缩略图。我有两个选项,DecodePixelWidth或ScaleTransform。

我的问题:

  1. 哪一个更快?
  2. 哪种方式更合适?
  3. 他们每个人做什么?
  4. 哪一个使用更少的内存/ CPU?
  5. 首先:

    我更喜欢这种方法。它使用稍多的内存,但似乎更快。但是,Idk为什么?它是使用Matrix并使用GPU来完成工作吗?在这种情况下,我的客户可能会或可能不会尽快完成。

    using (var stream = new MemoryStream(rasterizedPage.ImageData, false))
    {
        var bitmap = DocHelper.ConvertToBitmapImage(stream);
        var transform = new ScaleTransform(0.1, 0.1);
        var thumbnail = new WriteableBitmap(new TransformedBitmap(bitmap, transform));
    
        byte[] byteImage = DocHelper.ConvertToBytes(thumbnail);
    
        return byteImage;
    }
    

    第二

    此方法使用较少的内存,但似乎较慢,图像模糊,但它们是缩略图,所以它没问题。还是,ScaleTransform更好吗?

    using (var stream = new MemoryStream(rasterizedPage.ImageData, false))
    {
        byte[] byteImage;
        var bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.DecodePixelWidth = 120;
        bitmap.StreamSource = stream;
        bitmap.EndInit();
        bitmap.Freeze();
        byteImage = DocHelper.ConvertToBytes(bitmap);
    
        return byteImage;
    }
    

    感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

经过一番研究后,我得出了这个结论。

<强> ScaleTransform

根据thisScaleTransform使用transformation matrix来计算积分。它还具有诸如

之类的功能
  

可冻结功能:可以将ScaleTransform对象声明为资源,在多个对象之间共享,使其成为只读以改进   性能,克隆,并使线程安全。

与DecodePixelWidth不同,您还可以使用ScaleTransform旋转,翻转,创建镜像等。看看这些examples

何时使用:

  1. 旋转图像。
  2. 调整图片大小。
  3. 翻转图片。
  4. 创建镜像。
  5. 使用线程的应用程序。
  6. 将图像用作资源。
  7. 何时不使用:

    1. 使图像太大。它会破裂。您的应用程序将使用如此多的内存,您将获得内存异常。看看here

    2. <强> DecodePixelWidth

      DecodePixelWidth是另一种调整图像大小的选项。唯一的问题是它似乎只处理JPEG / PNG编解码器。

        

      JPEG和便携式网络图形(PNG)编解码器本机解码   图像到指定的大小;其他编解码器解码图像   原始尺寸并将图像缩放到所需的大小。

      实际上,如果您尝试将其与其他类型的图像一起使用,则会产生odd behavior。你最好在XAML中修改宽度。此外,如果您使用JPEG / PNG编解码器以外的格式,它将distort您的图像。对我来说,似乎在其他格式中它会以原始大小对图像进行解码,因此很可能会使像素太靠近并使图像失真。

      何时使用:

      1. JPEG / PNG编解码器内的图像。
      2. 将大图像调整为小图像以节省内存。
      3. 何时不使用:

        1. 当您的图像使用与JPEG / PNG不同的编解码器时。

        2. <强>结论

          它们只是调整图像大小的两种不同方式,除了ScaleTransform具有其他功能,并且是更好的选择。