From b2e936e914093f131b6b41c3dd76ce05ac46d926 Mon Sep 17 00:00:00 2001 From: Ruben Date: Wed, 8 Jan 2025 20:52:43 +0100 Subject: [PATCH 1/3] Change DPI to 96 --- src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs b/src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs index b83e0cabaa..08a3672da6 100644 --- a/src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs +++ b/src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs @@ -24,8 +24,8 @@ public static unsafe WriteableBitmap ToWriteableBitmap(this IMagic where TQuantumType : struct, IConvertible { var size = new PixelSize((int)self.Width, (int)self.Height); - var density = new Vector(self.Density.X, self.Density.Y); - var bitmap = new WriteableBitmap(size, density, PixelFormats.Rgba8888, AlphaFormat.Unpremul); + var dpi = new Vector(96, 96); + var bitmap = new WriteableBitmap(size, dpi, PixelFormats.Rgba8888, AlphaFormat.Unpremul); using var framebuffer = bitmap.Lock(); using var pixels = self.GetPixelsUnsafe(); From 4ce98256b55bfce318772fb95a474527622a4c11 Mon Sep 17 00:00:00 2001 From: Ruben Date: Thu, 9 Jan 2025 18:01:54 +0100 Subject: [PATCH 2/3] Update IMagickImageExtentions.cs --- .../IMagickImageExtentions.cs | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs b/src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs index 08a3672da6..e94e9186e4 100644 --- a/src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs +++ b/src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs @@ -15,7 +15,7 @@ namespace ImageMagick; public static partial class IMagickImageExtentions { /// - /// Converts this instance to a . + /// Converts this instance to a with a default DPI of 96x96. /// /// The image. /// The quantum type. @@ -42,4 +42,33 @@ public static unsafe WriteableBitmap ToWriteableBitmap(this IMagic return bitmap; } + + /// + /// Converts this instance to a . + /// + /// The image. + /// The quantum type. + /// A . + public static unsafe WriteableBitmap ToWriteableBitmapWithDensity(this IMagickImage self) + where TQuantumType : struct, IConvertible + { + var size = new PixelSize((int)self.Width, (int)self.Height); + var density = new Vector(self.Density.X, self.Density.Y); + var bitmap = new WriteableBitmap(size, density, PixelFormats.Rgba8888, AlphaFormat.Unpremul); + + using var framebuffer = bitmap.Lock(); + using var pixels = self.GetPixelsUnsafe(); + + var destination = framebuffer.Address; + for (var y = 0; y < self.Height; y++) + { + var bytes = pixels.ToByteArray(0, y, self.Width, 1, "RGBA"); + if (bytes != null) + Marshal.Copy(bytes, 0, destination, bytes.Length); + + destination += framebuffer.RowBytes; + } + + return bitmap; + } } From 65fcaede10ee1fb4b07d1d7a82c36c90f70132ea Mon Sep 17 00:00:00 2001 From: Ruben Date: Thu, 9 Jan 2025 18:14:26 +0100 Subject: [PATCH 3/3] Update IMagickImageExtentions.cs --- .../IMagickImageExtentions.cs | 27 ++++++------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs b/src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs index e94e9186e4..8e82290583 100644 --- a/src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs +++ b/src/Magick.NET.AvaloniaMediaImaging/IMagickImageExtentions.cs @@ -23,24 +23,7 @@ public static partial class IMagickImageExtentions public static unsafe WriteableBitmap ToWriteableBitmap(this IMagickImage self) where TQuantumType : struct, IConvertible { - var size = new PixelSize((int)self.Width, (int)self.Height); - var dpi = new Vector(96, 96); - var bitmap = new WriteableBitmap(size, dpi, PixelFormats.Rgba8888, AlphaFormat.Unpremul); - - using var framebuffer = bitmap.Lock(); - using var pixels = self.GetPixelsUnsafe(); - - var destination = framebuffer.Address; - for (var y = 0; y < self.Height; y++) - { - var bytes = pixels.ToByteArray(0, y, self.Width, 1, "RGBA"); - if (bytes != null) - Marshal.Copy(bytes, 0, destination, bytes.Length); - - destination += framebuffer.RowBytes; - } - - return bitmap; + return self.ToWriteableBitmapInternal(false); } /// @@ -51,9 +34,15 @@ public static unsafe WriteableBitmap ToWriteableBitmap(this IMagic /// A . public static unsafe WriteableBitmap ToWriteableBitmapWithDensity(this IMagickImage self) where TQuantumType : struct, IConvertible + { + return self.ToWriteableBitmapInternal(true); + } + + private static unsafe WriteableBitmap ToWriteableBitmapInternal(this IMagickImage self, bool withDensity) + where TQuantumType : struct, IConvertible { var size = new PixelSize((int)self.Width, (int)self.Height); - var density = new Vector(self.Density.X, self.Density.Y); + var density = withDensity ? new Vector(self.Density.X, self.Density.Y) : new Vector(96, 96); var bitmap = new WriteableBitmap(size, density, PixelFormats.Rgba8888, AlphaFormat.Unpremul); using var framebuffer = bitmap.Lock();