using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.PixelFormats; namespace SatelliteProvider.Tests.TestUtilities; internal static class UavTileImageFactory { public static byte[] CreateRandomJpeg(int width = 256, int height = 256, int seed = 42, int quality = 95) { using var image = new Image(width, height); var random = new Random(seed); image.ProcessPixelRows(accessor => { for (var y = 0; y < accessor.Height; y++) { var row = accessor.GetRowSpan(y); for (var x = 0; x < row.Length; x++) { row[x] = new Rgba32( (byte)random.Next(256), (byte)random.Next(256), (byte)random.Next(256)); } } }); using var stream = new MemoryStream(); image.Save(stream, new JpegEncoder { Quality = quality }); return stream.ToArray(); } public static byte[] CreateUniformGreyJpeg(int width = 256, int height = 256, byte value = 128, int quality = 95) { using var image = new Image(width, height); image.ProcessPixelRows(accessor => { for (var y = 0; y < accessor.Height; y++) { var row = accessor.GetRowSpan(y); for (var x = 0; x < row.Length; x++) { row[x] = new L8(value); } } }); using var stream = new MemoryStream(); image.Save(stream, new JpegEncoder { Quality = quality }); return stream.ToArray(); } public static byte[] CreatePng(int width = 256, int height = 256) { using var image = new Image(width, height); image.ProcessPixelRows(accessor => { for (var y = 0; y < accessor.Height; y++) { var row = accessor.GetRowSpan(y); for (var x = 0; x < row.Length; x++) { row[x] = new Rgba32(255, 255, 255); } } }); using var stream = new MemoryStream(); image.Save(stream, new PngEncoder()); return stream.ToArray(); } }