[英]What is the difference between DecodePixelWidth Vs. ScaleTransform?
我想從一個來自Stream的byte []圖像制作縮略圖。 我有兩個選項,DecodePixelWidth或ScaleTransform。
我的問題:
第一:
我更喜歡這種方法。 它使用稍多的內存,但似乎更快。 但是,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;
}
謝謝您的幫助。
經過一些研究,我得出了這個結論。
ScaleTransform :
根據此 , ScaleTransform使用變換矩陣來計算點。 它還具有諸如此類的功能
Freezable功能 :ScaleTransform對象可以聲明為資源,在多個對象之間共享,只讀以提高性能,克隆並使線程安全。
與DecodePixelWidth不同,您還可以使用ScaleTransform旋轉,翻轉,創建鏡像等。 看看這些例子 。
何時使用:
何時不使用:
DecodePixelWidth :
DecodePixelWidth是調整圖像大小的另一個選項。 唯一的問題是它似乎只處理JPEG / PNG編解碼器。
JPEG和便攜式網絡圖形(PNG)編解碼器本地將圖像解碼為指定的大小; 其他編解碼器以原始大小解碼圖像並將圖像縮放到所需大小。
實際上,如果您嘗試將其與其他類型的圖像一起使用,則會導致奇怪的行為 。 你最好在XAML中修改寬度。 此外,如果您使用JPEG / PNG編解碼器以外的格式,它將扭曲您的圖像。 對我來說,似乎在其他格式中,它會以原始大小對圖像進行解碼,因此很可能會使像素太靠近並使圖像失真。
何時使用:
何時不使用:
結論 :
它們只是調整圖像大小的兩種不同方式,除了ScaleTransform具有其他功能,並且是更好的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.