C# DecodePixelWidth和ScaleTransform之间有什么区别?
我想从来自流的byte[]图像制作缩略图。我有两个选择,DecodePixelWidth或ScaleTransform 我的问题是:C# DecodePixelWidth和ScaleTransform之间有什么区别?,c#,.net,decode,pixel,scaletransform,C#,.net,Decode,Pixel,Scaletransform,我想从来自流的byte[]图像制作缩略图。我有两个选择,DecodePixelWidth或ScaleTransform 我的问题是: 哪一个更快 哪种方式更合适 他们每个人都做什么 哪一个使用更少的内存/CPU 第一: 我更喜欢这种方法。它使用的内存稍多,但似乎更快。然而,Idk为什么?是使用矩阵和GPU来做这项工作吗?在这种情况下,我的客户可能会也可能不会尽我所能快速完成 using (var stream = new MemoryStream(rasterizedPage.ImageData
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;
}
谢谢你的帮助。经过研究,我得出了这个结论 缩放转换格式: 根据,使用计算点。它还具有以下功能: 可自由化功能:ScaleTransform对象可以声明为资源,在多个对象之间共享,并设置为只读以改进 性能,克隆,并使线程安全 您还可以使用ScaleTransform和PixelWidth进行旋转、翻转、创建镜像等操作。看看这些 何时使用:
解码像素宽度: 是调整图像大小的另一个选项。唯一的问题是,它似乎只处理JPEG/PNG编解码器 JPEG和便携式网络图形(PNG)编解码器本机解码 将图像放大到指定的大小;其他编解码器在其初始位置对图像进行解码 原始大小并将图像缩放到所需大小 事实上,如果您尝试将其与其他类型的图像一起使用,则会导致错误。最好在XAML中修改宽度。此外,如果您使用JPEG/PNG编解码器以外的格式,它将保护您的图像。在我看来,由于在其他格式中,它将以原始大小解码图像,因此很可能将像素放得太近,从而扭曲图像 何时使用:
结论:
它们只是调整图像大小的两种不同方法,除了ScaleTransform还有其他功能,是更好的选择。DecodePixelWidth存在的原因主要是性能。你能详细说明一下吗?表现如何?它比ScaleTransform更快吗?我不知道,但这似乎是唯一合乎逻辑的设计目标。如果UI已经能够进行缩放,为什么要修改解码器。性能是唯一的原因,因为没有功能原因。