[Peek]Adds QOI file support (#29919)

* Adds QOI support to Peek

* Reduce allocations on QoiImage

* Add to QOI to Peek's NOTICE as well.

* Ensure file stream is closed after reading QOI
This commit is contained in:
Pedro Lamas
2023-12-18 15:54:17 +00:00
committed by GitHub
parent ee22581913
commit 4c3e5348f0
22 changed files with 294 additions and 205 deletions

View File

@@ -9,6 +9,7 @@ using System.Threading;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using ManagedCommon;
using Microsoft.PowerToys.FilePreviewCommon;
using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Media.Imaging;
@@ -91,6 +92,14 @@ namespace Peek.FilePreviewer.Previewers
ImageSize = size.Value;
}
}
else if (IsQoi(Item))
{
var size = await Task.Run(Item.GetQoiSize);
if (size != null)
{
ImageSize = size.Value;
}
}
else
{
ImageSize = await Task.Run(Item.GetImageSize);
@@ -257,6 +266,12 @@ namespace Peek.FilePreviewer.Previewers
Preview = source;
}
else if (IsQoi(Item))
{
using var bitmap = QoiImage.FromStream(stream);
Preview = await BitmapHelper.BitmapToImageSource(bitmap, true, cancellationToken);
}
else
{
var bitmap = new BitmapImage();
@@ -286,6 +301,11 @@ namespace Peek.FilePreviewer.Previewers
return item.Extension == ".svg";
}
private bool IsQoi(IFileSystemItem item)
{
return item.Extension == ".qoi";
}
private void Clear()
{
lowQualityThumbnailPreview = null;
@@ -367,6 +387,8 @@ namespace Peek.FilePreviewer.Previewers
".cr3",
".svg",
".qoi",
};
}
}