aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Gtk3/UI/Windows
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
parent3c61d560c39d6edf897183fe33b8047c25d2d895 (diff)
Replace ImageSharp with SkiaSharp everywhere (#7030)
* 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')
-rw-r--r--src/Ryujinx.Gtk3/UI/Windows/AvatarWindow.cs29
-rw-r--r--src/Ryujinx.Gtk3/UI/Windows/UserProfilesManagerWindow.cs10
2 files changed, 22 insertions, 17 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();
}
diff --git a/src/Ryujinx.Gtk3/UI/Windows/UserProfilesManagerWindow.cs b/src/Ryujinx.Gtk3/UI/Windows/UserProfilesManagerWindow.cs
index d1e5fa9f..77afc5d1 100644
--- a/src/Ryujinx.Gtk3/UI/Windows/UserProfilesManagerWindow.cs
+++ b/src/Ryujinx.Gtk3/UI/Windows/UserProfilesManagerWindow.cs
@@ -4,15 +4,13 @@ using Ryujinx.HLE.FileSystem;
using Ryujinx.HLE.HOS.Services.Account.Acc;
using Ryujinx.UI.Common.Configuration;
using Ryujinx.UI.Widgets;
-using SixLabors.ImageSharp;
-using SixLabors.ImageSharp.Processing;
+using SkiaSharp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
-using Image = SixLabors.ImageSharp.Image;
namespace Ryujinx.UI.Windows
{
@@ -177,13 +175,13 @@ namespace Ryujinx.UI.Windows
private void ProcessProfileImage(byte[] buffer)
{
- using Image image = Image.Load(buffer);
+ using var image = SKBitmap.Decode(buffer);
- image.Mutate(x => x.Resize(256, 256));
+ image.Resize(new SKImageInfo(256, 256), SKFilterQuality.High);
using MemoryStream streamJpg = MemoryStreamManager.Shared.GetStream();
- image.SaveAsJpeg(streamJpg);
+ image.Encode(streamJpg, SKEncodedImageFormat.Jpeg, 80);
_bufferImageProfile = streamJpg.ToArray();
}