remove image sharp from gtk3 project

This commit is contained in:
Emmanuel Hansen 2024-07-15 09:53:41 +00:00
commit d0f4d77ab4
7 changed files with 48 additions and 46 deletions

View file

@ -42,9 +42,7 @@
<PackageVersion Include="Silk.NET.Vulkan" Version="2.16.0" /> <PackageVersion Include="Silk.NET.Vulkan" Version="2.16.0" />
<PackageVersion Include="Silk.NET.Vulkan.Extensions.EXT" Version="2.16.0" /> <PackageVersion Include="Silk.NET.Vulkan.Extensions.EXT" Version="2.16.0" />
<PackageVersion Include="Silk.NET.Vulkan.Extensions.KHR" Version="2.16.0" /> <PackageVersion Include="Silk.NET.Vulkan.Extensions.KHR" Version="2.16.0" />
<PackageVersion Include="SixLabors.ImageSharp" Version="2.1.8" />
<PackageVersion Include="SkiaSharp" Version="2.88.7" /> <PackageVersion Include="SkiaSharp" Version="2.88.7" />
<PackageVersion Include="SixLabors.ImageSharp.Drawing" Version="1.0.0" />
<PackageVersion Include="SPB" Version="0.0.4-build32" /> <PackageVersion Include="SPB" Version="0.0.4-build32" />
<PackageVersion Include="System.IO.Hashing" Version="8.0.0" /> <PackageVersion Include="System.IO.Hashing" Version="8.0.0" />
<PackageVersion Include="System.Management" Version="8.0.0" /> <PackageVersion Include="System.Management" Version="8.0.0" />

View file

@ -13,7 +13,6 @@ using Ryujinx.UI.Common.Configuration;
using Ryujinx.UI.Common.Helper; using Ryujinx.UI.Common.Helper;
using Ryujinx.UI.Common.SystemInfo; using Ryujinx.UI.Common.SystemInfo;
using Ryujinx.UI.Widgets; using Ryujinx.UI.Widgets;
using SixLabors.ImageSharp.Formats.Jpeg;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
@ -162,12 +161,6 @@ namespace Ryujinx
}); });
}; };
// Sets ImageSharp Jpeg Encoder Quality.
SixLabors.ImageSharp.Configuration.Default.ImageFormatsManager.SetEncoder(JpegFormat.Instance, new JpegEncoder()
{
Quality = 100,
});
string localConfigurationPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ReleaseInformation.ConfigName); string localConfigurationPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ReleaseInformation.ConfigName);
string appDataConfigurationPath = Path.Combine(AppDataManager.BaseDirPath, ReleaseInformation.ConfigName); string appDataConfigurationPath = Path.Combine(AppDataManager.BaseDirPath, ReleaseInformation.ConfigName);

View file

@ -30,7 +30,6 @@
<PackageReference Include="OpenTK.Graphics" /> <PackageReference Include="OpenTK.Graphics" />
<PackageReference Include="SPB" /> <PackageReference Include="SPB" />
<PackageReference Include="SharpZipLib" /> <PackageReference Include="SharpZipLib" />
<PackageReference Include="SixLabors.ImageSharp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View file

@ -13,16 +13,13 @@ using Ryujinx.Input.HLE;
using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Configuration;
using Ryujinx.UI.Common.Helper; using Ryujinx.UI.Common.Helper;
using Ryujinx.UI.Widgets; using Ryujinx.UI.Widgets;
using SixLabors.ImageSharp; using SkiaSharp;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Runtime.InteropServices;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Image = SixLabors.ImageSharp.Image;
using Key = Ryujinx.Input.Key; using Key = Ryujinx.Input.Key;
using ScalingFilter = Ryujinx.Graphics.GAL.ScalingFilter; using ScalingFilter = Ryujinx.Graphics.GAL.ScalingFilter;
using Switch = Ryujinx.HLE.Switch; using Switch = Ryujinx.HLE.Switch;
@ -404,23 +401,31 @@ namespace Ryujinx.UI
return; return;
} }
Image image = e.IsBgra ? Image.LoadPixelData<Bgra32>(e.Data, e.Width, e.Height) var colorType = e.IsBgra ? SKColorType.Bgra8888 : SKColorType.Rgba8888;
: Image.LoadPixelData<Rgba32>(e.Data, e.Width, e.Height); using var image = new SKBitmap(new SKImageInfo(e.Width, e.Height, colorType, SKAlphaType.Premul));
if (e.FlipX) Marshal.Copy(e.Data, 0, image.GetPixels(), e.Data.Length);
using var surface = SKSurface.Create(image.Info);
var canvas = surface.Canvas;
if (e.FlipX || e.FlipY)
{ {
image.Mutate(x => x.Flip(FlipMode.Horizontal)); canvas.Clear(SKColors.Transparent);
float scaleX = e.FlipX ? -1 : 1;
float scaleY = e.FlipY ? -1 : 1;
var matrix = SKMatrix.CreateScale(scaleX, scaleY, image.Width / 2f, image.Height / 2f);
canvas.SetMatrix(matrix);
} }
canvas.DrawBitmap(image, new SKPoint());
if (e.FlipY) surface.Flush();
{ using var snapshot = surface.Snapshot();
image.Mutate(x => x.Flip(FlipMode.Vertical)); using var encoded = snapshot.Encode(SKEncodedImageFormat.Png, 80);
} using var file = File.OpenWrite(path);
encoded.SaveTo(file);
image.SaveAsPng(path, new PngEncoder()
{
ColorType = PngColorType.Rgb,
});
image.Dispose(); image.Dispose();

View file

@ -9,16 +9,13 @@ using LibHac.Tools.FsSystem.NcaUtils;
using Ryujinx.Common.Memory; using Ryujinx.Common.Memory;
using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.FileSystem;
using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Configuration;
using SixLabors.ImageSharp; using SkiaSharp;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using System; using System;
using System.Buffers.Binary; using System.Buffers.Binary;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using Image = SixLabors.ImageSharp.Image; using System.Runtime.InteropServices;
namespace Ryujinx.UI.Windows namespace Ryujinx.UI.Windows
{ {
@ -144,9 +141,11 @@ namespace Ryujinx.UI.Windows
stream.Position = 0; 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()); _avatarDict.Add(item.FullPath, streamPng.ToArray());
} }
@ -170,15 +169,23 @@ namespace Ryujinx.UI.Windows
{ {
using MemoryStream streamJpg = MemoryStreamManager.Shared.GetStream(); 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.Red * 255),
(byte)(_backgroundColor.Green * 255), (byte)(_backgroundColor.Green * 255),
(byte)(_backgroundColor.Blue * 255), (byte)(_backgroundColor.Blue * 255),
(byte)(_backgroundColor.Alpha * 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(); return streamJpg.ToArray();
} }

View file

@ -4,15 +4,13 @@ using Ryujinx.HLE.FileSystem;
using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.Services.Account.Acc;
using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Configuration;
using Ryujinx.UI.Widgets; using Ryujinx.UI.Widgets;
using SixLabors.ImageSharp; using SkiaSharp;
using SixLabors.ImageSharp.Processing;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Image = SixLabors.ImageSharp.Image;
namespace Ryujinx.UI.Windows namespace Ryujinx.UI.Windows
{ {
@ -177,13 +175,13 @@ namespace Ryujinx.UI.Windows
private void ProcessProfileImage(byte[] buffer) 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(); using MemoryStream streamJpg = MemoryStreamManager.Shared.GetStream();
image.SaveAsJpeg(streamJpg); image.Encode(streamJpg, SKEncodedImageFormat.Jpeg, 80);
_bufferImageProfile = streamJpg.ToArray(); _bufferImageProfile = streamJpg.ToArray();
} }

View file

@ -4,6 +4,7 @@ using SkiaSharp;
using System; using System;
using System.IO; using System.IO;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security.Cryptography; using System.Security.Cryptography;
namespace Ryujinx.HLE.HOS.Services.Caps namespace Ryujinx.HLE.HOS.Services.Caps
@ -117,7 +118,8 @@ namespace Ryujinx.HLE.HOS.Services.Caps
} }
// NOTE: The saved JPEG file doesn't have the limitation in the extra EXIF data. // NOTE: The saved JPEG file doesn't have the limitation in the extra EXIF data.
using var bitmap = SKBitmap.Decode(screenshotData, new SKImageInfo(1280, 720, SKColorType.Rgba8888)); using var bitmap = new SKBitmap(new SKImageInfo(1280, 720, SKColorType.Rgba8888));
Marshal.Copy(screenshotData, 0, bitmap.GetPixels(), screenshotData.Length);
using var data = bitmap.Encode(SKEncodedImageFormat.Jpeg, 80); using var data = bitmap.Encode(SKEncodedImageFormat.Jpeg, 80);
using var file = File.OpenWrite(filePath); using var file = File.OpenWrite(filePath);
data.SaveTo(file); data.SaveTo(file);