using System.Globalization; using Avalonia; using Avalonia.Data.Converters; using Avalonia.Media; using Avalonia.Media.Imaging; using Avalonia.Platform; using SkiaSharp; namespace InABox.Avalonia.Converters; public class ByteArrayToImageSourceConverter : AbstractConverter { public static ByteArrayToImageSourceConverter Instance { get; } = new(); public bool Transparent { get; set; } = false; public IImage? Convert(byte[]? value) { Bitmap? result = null; if (value?.Any() == true) { if (Transparent) { var skb = SKBitmap.Decode(value); var transparentColor = skb.GetPixel(0, 0); var newPixels = skb.Pixels.Select(x => Equals(x, transparentColor) ? SKColors.Transparent : x); skb.Pixels = newPixels.ToArray(); SKImage image = SKImage.FromPixels(skb.PeekPixels()); SKData encoded = image.Encode(SKEncodedImageFormat.Png, 100); value = encoded.ToArray(); } using (var stream = new MemoryStream(value)) { result = new Bitmap(stream); } } return result; } protected override IImage? Convert(byte[]? value, object? parameter = null) { return Convert(value); } }