Я хотел бы сделать миниатюры из изображения byte [], которое появилось из Stream. У меня есть два варианта: DecodePixelWidth или ScaleTransform.В чем разница между DecodePixelWidth Vs. ScaleTransform?
Мои вопросы:
- Какой быстрее?
- Каков наиболее подходящий способ?
- Что делает каждый из них?
- Какой из них использует меньше памяти/процессора?
Первое:
Я предпочитаю этот метод. Он использует немного больше памяти, но, кажется, быстрее. Однако, Икк, почему? Использует ли Матрица и использует 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 существует, - это в основном производительность. – usr
Можете ли вы подробно остановиться на этом? Каким образом? Это быстрее Vs. ScaleTransform? – AzzamAziz
Я не знаю, но это единственная цель логического дизайна. Зачем изменять декодер, если пользовательский интерфейс уже способен масштабировать. Перф - единственная причина, поскольку нет функциональной причины. – usr