【发布时间】:2015-01-26 19:11:07
【问题描述】:
我想从来自 Stream 的 byte[] 图像制作缩略图。我有两个选择,DecodePixelWidth 或 ScaleTransform。
我的问题:
- 哪个更快?
- 哪种方式更合适?
- 他们各自做什么?
- 哪一个使用更少的内存/CPU?
第一:
我更喜欢这种方法。它使用稍多的内存,但似乎更快。但是,我知道为什么?是否使用 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;
}
感谢您的帮助。
【问题讨论】:
-
DecodePixelWidth 存在的原因主要是性能。
-
你能详细说明一下吗?以什么方式表现?它是否更快?缩放变换?
-
我不知道,但这似乎是唯一合乎逻辑的设计目标。如果 UI 已经能够缩放,为什么还要修改解码器。性能是唯一的原因,因为没有功能原因。
标签: c# .net decode pixel scaletransform