using SixLabors.ImageSharp.PixelFormats; using Robust.Shared.Maths; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Advanced; namespace Robust.Client.Utility { public static class ImageSharpExt { public static Color ConvertImgSharp(this Rgba32 color) { return new Color(color.R, color.G, color.B, color.A); } public static Rgba32 ConvertImgSharp(this Color color) { return new Rgba32(color.R, color.G, color.B, color.A); } /// /// Blit an image into another, with the specified offset. /// /// The image to copy data from. /// The sub section of that will be copied. /// /// The offset into that data will be copied into. /// /// The image to copy to. /// The type of pixel stored in the images. public static void Blit(this Image source, UIBox2i sourceRect, Image destination, Vector2i destinationOffset) where T : struct, IPixel { // TODO: Bounds checks. var srcSpan = source.GetPixelSpan(); var dstSpan = destination.GetPixelSpan(); var srcWidth = source.Width; var dstWidth = destination.Width; var (ox, oy) = destinationOffset; for (var x = 0; x < sourceRect.Width; x++) { for (var y = 0; y < sourceRect.Height; y++) { var pixel = srcSpan[x + sourceRect.Left + srcWidth * (y + sourceRect.Top)]; dstSpan[x + ox + dstWidth * (y + oy)] = pixel; } } } } }