From 31daed9e81799eae49ac354f6ad8d31fe74f80ca Mon Sep 17 00:00:00 2001 From: ww-rm Date: Sun, 26 Oct 2025 21:49:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E4=B8=8D=E5=8F=97=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=9A=84=E5=9B=BE=E5=83=8F=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Spine/Exporters/FrameExporter.cs | 29 ++++++++++++++++++- .../Exporters/FrameExporterViewModel.cs | 6 +++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/Spine/Exporters/FrameExporter.cs b/Spine/Exporters/FrameExporter.cs index f73f202..9ec7198 100644 --- a/Spine/Exporters/FrameExporter.cs +++ b/Spine/Exporters/FrameExporter.cs @@ -18,7 +18,23 @@ namespace Spine.Exporters public FrameExporter(uint width = 100, uint height = 100) : base(width, height) { } public FrameExporter(Vector2u resolution) : base(resolution) { } - public SKEncodedImageFormat Format { get => _format; set => _format = value; } + public SKEncodedImageFormat Format + { + get => _format; + set { + switch (value) + { + case SKEncodedImageFormat.Jpeg: + case SKEncodedImageFormat.Png: + case SKEncodedImageFormat.Webp: + _format = value; + break; + default: + _logger.Warn("Omit unsupported exporter format: {0}", value); + break; + } + } + } protected SKEncodedImageFormat _format = SKEncodedImageFormat.Png; public int Quality { get => _quality; set => _quality = Math.Clamp(value, 0, 100); } @@ -33,5 +49,16 @@ namespace Spine.Exporters using var stream = File.OpenWrite(output); data.SaveTo(stream); } + + /// + /// 获取画面数据, 正常像素, 非预乘 + /// + public SKData Export(params SpineObject[] spines) + { + using var frame = GetFrame(spines); + var info = new SKImageInfo(frame.Width, frame.Height, SKColorType.Rgba8888, SKAlphaType.Premul); + using var skImage = SKImage.FromPixelCopy(info, frame.Image.Pixels); + return skImage.Encode(SKEncodedImageFormat.Png, 100); + } } } diff --git a/SpineViewer/ViewModels/Exporters/FrameExporterViewModel.cs b/SpineViewer/ViewModels/Exporters/FrameExporterViewModel.cs index 5a27099..4157131 100644 --- a/SpineViewer/ViewModels/Exporters/FrameExporterViewModel.cs +++ b/SpineViewer/ViewModels/Exporters/FrameExporterViewModel.cs @@ -20,7 +20,11 @@ namespace SpineViewer.ViewModels.Exporters { public class FrameExporterViewModel(MainWindowViewModel vmMain) : BaseExporterViewModel(vmMain) { - public static ImmutableArray FrameFormatOptions { get; } = Enum.GetValues().ToImmutableArray(); + public static ImmutableArray FrameFormatOptions { get; } = [ + SKEncodedImageFormat.Png, + SKEncodedImageFormat.Webp, + SKEncodedImageFormat.Jpeg, + ]; public SKEncodedImageFormat Format { get => _format; set => SetProperty(ref _format, value); } protected SKEncodedImageFormat _format = SKEncodedImageFormat.Png;