123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- 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<byte[]?, IImage?>
- {
- 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);
- }
- }
|