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