Support JXR image but SDR only #1680

This commit is contained in:
ema
2025-06-30 01:49:43 +08:00
parent 856f7f137c
commit a65a453390
3 changed files with 72 additions and 3 deletions

View File

@@ -19,14 +19,12 @@ using QuickLook.Common.Helpers;
using QuickLook.Common.Plugin;
using System;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using static System.Net.WebRequestMethods;
namespace QuickLook.Plugin.ImageViewer.AnimatedImage.Providers;

View File

@@ -0,0 +1,67 @@
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using QuickLook.Common.Helpers;
using QuickLook.Common.Plugin;
using System;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
namespace QuickLook.Plugin.ImageViewer.AnimatedImage.Providers;
internal class WmpProvider : AnimationProvider
{
public WmpProvider(Uri path, MetaProvider meta, ContextObject contextObject) : base(path, meta, contextObject)
{
Animator = new Int32AnimationUsingKeyFrames();
Animator.KeyFrames.Add(new DiscreteInt32KeyFrame(0,
KeyTime.FromTimeSpan(TimeSpan.Zero)));
}
public override Task<BitmapSource> GetThumbnail(Size renderSize)
{
// Skip thumbnail
return new Task<BitmapSource>(() => null);
}
public override Task<BitmapSource> GetRenderedFrame(int index)
{
return new Task<BitmapSource>(() =>
{
try
{
BitmapDecoder decoder = new WmpBitmapDecoder(
Path,
BitmapCreateOptions.PreservePixelFormat,
BitmapCacheOption.OnLoad);
return decoder.Frames[0];
}
catch (Exception e)
{
ProcessHelper.WriteLog(e.ToString());
return null;
}
});
}
public override void Dispose()
{
}
}

View File

@@ -40,7 +40,7 @@ public class Plugin : IViewer
".gif",
".hdr", ".heic", ".heif",
".ico", ".icon", ".icns", ".iiq",
".jfif", ".jp2", ".jpeg", ".jpg", ".jxl", ".j2k", ".jpf", ".jpx", ".jpm",
".jfif", ".jp2", ".jpeg", ".jpg", ".jxl", ".j2k", ".jpf", ".jpx", ".jpm", ".jxr",
".k25", ".kdc",
".mdc", ".mef", ".mos", ".mrw", ".mj2", ".miff",
".nef", ".nrw",
@@ -74,6 +74,10 @@ public class Plugin : IViewer
new KeyValuePair<string[], Type>(
useColorProfile ? [] : [".bmp", ".jpg", ".jpeg", ".jfif", ".tif", ".tiff"],
typeof(NativeProvider)));
AnimatedImage.AnimatedImage.Providers.Add(
new KeyValuePair<string[], Type>(
useColorProfile ? [] : [".jxr"],
typeof(WmpProvider)));
AnimatedImage.AnimatedImage.Providers.Add(
new KeyValuePair<string[], Type>([".icns"],
typeof(IcnsProvider)));