aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Gtk3/UI/Windows/AvatarWindow.cs
diff options
context:
space:
mode:
authorEmmanuel Hansen <emmausssss@gmail.com>2024-08-31 14:32:53 +0000
committerGitHub <noreply@github.com>2024-08-31 11:32:53 -0300
commite0acde04bb032fd056904b909b3fd00c1a6fb996 (patch)
treec3f146228712153af6f277e0e874d83a56b31d06 /src/Ryujinx.Gtk3/UI/Windows/AvatarWindow.cs
parent3c61d560c39d6edf897183fe33b8047c25d2d895 (diff)
Replace ImageSharp with SkiaSharp everywhere (#7030)1.1.1381
* replace ImageSharp with SkiaSharp for inline keyboard applet rendering * fix avalonia inline keyboard input * remove image sharp from gtk3 project * add skiasharp linux assets * fix whitespace * fix format * fix ico image offset when saving shortcut to windows
Diffstat (limited to 'src/Ryujinx.Gtk3/UI/Windows/AvatarWindow.cs')
-rw-r--r--src/Ryujinx.Gtk3/UI/Windows/AvatarWindow.cs29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/Ryujinx.Gtk3/UI/Windows/AvatarWindow.cs b/src/Ryujinx.Gtk3/UI/Windows/AvatarWindow.cs
index d9ecd47b..fcd960df 100644
--- a/src/Ryujinx.Gtk3/UI/Windows/AvatarWindow.cs
+++ b/src/Ryujinx.Gtk3/UI/Windows/AvatarWindow.cs
@@ -9,16 +9,13 @@ using LibHac.Tools.FsSystem.NcaUtils;
using Ryujinx.Common.Memory;
using Ryujinx.HLE.FileSystem;
using Ryujinx.UI.Common.Configuration;
-using SixLabors.ImageSharp;
-using SixLabors.ImageSharp.Formats.Png;
-using SixLabors.ImageSharp.PixelFormats;
-using SixLabors.ImageSharp.Processing;
+using SkiaSharp;
using System;
using System.Buffers.Binary;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
-using Image = SixLabors.ImageSharp.Image;
+using System.Runtime.InteropServices;
namespace Ryujinx.UI.Windows
{
@@ -144,9 +141,11 @@ namespace Ryujinx.UI.Windows
stream.Position = 0;
- Image avatarImage = Image.LoadPixelData<Rgba32>(DecompressYaz0(stream), 256, 256);
+ using var avatarImage = new SKBitmap(new SKImageInfo(256, 256, SKColorType.Rgba8888));
+ var data = DecompressYaz0(stream);
+ Marshal.Copy(data, 0, avatarImage.GetPixels(), data.Length);
- avatarImage.SaveAsPng(streamPng);
+ avatarImage.Encode(streamPng, SKEncodedImageFormat.Png, 80);
_avatarDict.Add(item.FullPath, streamPng.ToArray());
}
@@ -170,15 +169,23 @@ namespace Ryujinx.UI.Windows
{
using MemoryStream streamJpg = MemoryStreamManager.Shared.GetStream();
- Image avatarImage = Image.Load(data, new PngDecoder());
+ using var avatarImage = SKBitmap.Decode(data);
+ using var surface = SKSurface.Create(avatarImage.Info);
- avatarImage.Mutate(x => x.BackgroundColor(new Rgba32(
+ var background = new SKColor(
(byte)(_backgroundColor.Red * 255),
(byte)(_backgroundColor.Green * 255),
(byte)(_backgroundColor.Blue * 255),
(byte)(_backgroundColor.Alpha * 255)
- )));
- avatarImage.SaveAsJpeg(streamJpg);
+ );
+ var canvas = surface.Canvas;
+ canvas.Clear(background);
+ canvas.DrawBitmap(avatarImage, new SKPoint());
+
+ surface.Flush();
+ using var snapshot = surface.Snapshot();
+ using var encoded = snapshot.Encode(SKEncodedImageFormat.Jpeg, 80);
+ encoded.SaveTo(streamJpg);
return streamJpg.ToArray();
}