Skip to content

Commit

Permalink
Corrected density checks and added extra unit tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
dlemstra committed Jul 28, 2023
1 parent 3687d7d commit adafa86
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ private static Density GetDefaultDensity(IMagickImage image, DensityUnit units)
{
Throw.IfNull(nameof(image), image);

if (units == DensityUnit.Undefined || (image.Density.Units == DensityUnit.Undefined && image.Density.X == 0 && image.Density.Y == 0))
if (units == DensityUnit.Undefined || (image.Density.X <= 0 || image.Density.Y <= 0))
return new Density(96);

return image.Density.ChangeUnits(units);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,42 +103,6 @@ public void ShouldReturnImageWithRgb24FormatForYCbCrImage()
Assert.Equal(0, pixels[2]);
}

[Fact]
public void ShouldNotConvertTheDpiWhenDensityIsUndefinedAndNotZero()
{
using var image = new MagickImage(MagickColors.Red, 5, 10);
image.Density = new Density(1, 2, DensityUnit.Undefined);

var bitmapSource = image.ToBitmapSourceWithDensity();

Assert.Equal(1, bitmapSource.DpiX);
Assert.Equal(2, bitmapSource.DpiY);
}

[Fact]
public void ShouldNotConvertTheDpiWhenDensityIsPixelsPerInch()
{
using var image = new MagickImage(MagickColors.Red, 5, 10);
image.Density = new Density(1, 2, DensityUnit.PixelsPerInch);

var bitmapSource = image.ToBitmapSourceWithDensity();

Assert.Equal(1, bitmapSource.DpiX);
Assert.Equal(2, bitmapSource.DpiY);
}

[Fact]
public void ShouldConvertTheDpiWhenDensityIsPixelsPerCentimeter()
{
using var image = new MagickImage(MagickColors.Red, 5, 10);
image.Density = new Density(1, 2, DensityUnit.PixelsPerCentimeter);

var bitmapSource = image.ToBitmapSourceWithDensity();

Assert.InRange(bitmapSource.DpiX, 2.53, 2.55);
Assert.InRange(bitmapSource.DpiY, 5.07, 5.09);
}

[Fact]
public void ShouldIgnoreTheDensityOfTheImage()
{
Expand All @@ -150,17 +114,5 @@ public void ShouldIgnoreTheDensityOfTheImage()
Assert.Equal(200, (int)bitmapSource.Width);
Assert.Equal(100, (int)bitmapSource.Height);
}

[Fact]
public void ShouldUseTheDensityOfTheImageWhenBitmapDensityIsSetToUse()
{
using var image = new MagickImage(MagickColors.Red, 200, 100);
image.Density = new Density(300, 200);

var bitmapSource = image.ToBitmapSourceWithDensity();

Assert.Equal(64, (int)bitmapSource.Width);
Assert.Equal(48, (int)bitmapSource.Height);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
// Copyright Dirk Lemstra https://github.com/dlemstra/Magick.NET.
// Licensed under the Apache License, Version 2.0.

using ImageMagick;
using Xunit;

namespace Magick.NET.SystemWindowsMedia.Tests;

public partial class MagickImageTests
{
public class TheToBitmapSourceWithDensityMethod
{
[Fact]
public void ShouldNotConvertTheDpiWhenDensityIsUndefinedAndNotZero()
{
using var image = new MagickImage(MagickColors.Red, 5, 10);
image.Density = new Density(1, 2, DensityUnit.Undefined);

var bitmapSource = image.ToBitmapSourceWithDensity();

Assert.Equal(1, bitmapSource.DpiX);
Assert.Equal(2, bitmapSource.DpiY);
}

[Fact]
public void ShouldUseTheDefaultDensityWhenXIsZero()
{
using var image = new MagickImage(MagickColors.Red, 1, 1);
image.Density = new Density(0, 1, DensityUnit.PixelsPerCentimeter);

var bitmapSource = image.ToBitmapSourceWithDensity();
Assert.Equal(96, bitmapSource.DpiX);
Assert.Equal(96, bitmapSource.DpiY);
}

[Fact]
public void ShouldUseTheDefaultDensityWhenYIsZero()
{
using var image = new MagickImage(MagickColors.Red, 1, 1);
image.Density = new Density(1, 0, DensityUnit.PixelsPerCentimeter);

var bitmapSource = image.ToBitmapSourceWithDensity();
Assert.Equal(96, bitmapSource.DpiX);
Assert.Equal(96, bitmapSource.DpiY);
}

[Fact]
public void ShouldNotConvertTheDpiWhenDensityIsPixelsPerInch()
{
using var image = new MagickImage(MagickColors.Red, 5, 10);
image.Density = new Density(1, 2, DensityUnit.PixelsPerInch);

var bitmapSource = image.ToBitmapSourceWithDensity();

Assert.Equal(1, bitmapSource.DpiX);
Assert.Equal(2, bitmapSource.DpiY);
}

[Fact]
public void ShouldConvertTheDpiWhenDensityIsPixelsPerCentimeter()
{
using var image = new MagickImage(MagickColors.Red, 5, 10);
image.Density = new Density(1, 2, DensityUnit.PixelsPerCentimeter);

var bitmapSource = image.ToBitmapSourceWithDensity();

Assert.InRange(bitmapSource.DpiX, 2.53, 2.55);
Assert.InRange(bitmapSource.DpiY, 5.07, 5.09);
}

[Fact]
public void ShouldUseTheDensityOfTheImageWhenBitmapDensityIsSetToUse()
{
using var image = new MagickImage(MagickColors.Red, 200, 100);
image.Density = new Density(300, 200);

var bitmapSource = image.ToBitmapSourceWithDensity();

Assert.Equal(64, (int)bitmapSource.Width);
Assert.Equal(48, (int)bitmapSource.Height);
}
}
}

0 comments on commit adafa86

Please sign in to comment.