Skip to content

Commit fcac05e

Browse files
committed
Added DcmReadDefines.
1 parent 9818b42 commit fcac05e

File tree

5 files changed

+227
-0
lines changed

5 files changed

+227
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright Dirk Lemstra https://github.com/dlemstra/Magick.NET.
2+
// Licensed under the Apache License, Version 2.0.
3+
4+
using System.Collections.Generic;
5+
6+
namespace ImageMagick.Formats;
7+
8+
/// <summary>
9+
/// Class for defines that are used when a <see cref="MagickFormat.Dcm"/> image is read.
10+
/// </summary>
11+
public sealed class DcmReadDefines : IReadDefines
12+
{
13+
/// <summary>
14+
/// Gets the format where the defines are for.
15+
/// </summary>
16+
public MagickFormat Format
17+
=> MagickFormat.Dcm;
18+
19+
/// <summary>
20+
/// Gets or sets a value indicating whether the interpretation of the rescale slope should be set.
21+
/// </summary>
22+
public bool? Rescale { get; set; }
23+
24+
/// <summary>
25+
/// Gets or sets a value indicating whether the display range should be set to the
26+
/// minimum and maximum pixel values.
27+
/// </summary>
28+
public bool? ResetDisplayRange { get; set; }
29+
30+
/// <summary>
31+
/// Gets or sets the window center.
32+
/// </summary>
33+
public double? WindowCenter { get; set; }
34+
35+
/// <summary>
36+
/// Gets or sets the window center.
37+
/// </summary>
38+
public double? WindowWidth { get; set; }
39+
40+
/// <summary>
41+
/// Gets the defines that should be set as a define on an image.
42+
/// </summary>
43+
public IEnumerable<IDefine> Defines
44+
{
45+
get
46+
{
47+
if (Rescale.HasValue)
48+
yield return new MagickDefine(Format, "rescale", Rescale.Value);
49+
50+
if (ResetDisplayRange.HasValue && ResetDisplayRange.Value)
51+
yield return new MagickDefine(Format, "display-range", "reset");
52+
53+
if (WindowCenter.HasValue && !WindowWidth.HasValue)
54+
yield return new MagickDefine(Format, "window", $"{WindowCenter}x");
55+
else if (WindowWidth.HasValue && !WindowCenter.HasValue)
56+
yield return new MagickDefine(Format, "window", $"x{WindowWidth}");
57+
else if (WindowCenter.HasValue && WindowWidth.HasValue)
58+
yield return new MagickDefine(Format, "window", $"{WindowCenter}x{WindowWidth}");
59+
}
60+
}
61+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright Dirk Lemstra https://github.com/dlemstra/Magick.NET.
2+
// Licensed under the Apache License, Version 2.0.
3+
4+
using ImageMagick;
5+
using ImageMagick.Formats;
6+
using Xunit;
7+
8+
namespace Magick.NET.Tests;
9+
10+
public partial class DcmReadDefinesTests
11+
{
12+
public class TheConstructor
13+
{
14+
[Fact]
15+
public void ShouldNotSetAnyDefines()
16+
{
17+
using var image = new MagickImage();
18+
image.Settings.SetDefines(new DcmReadDefines());
19+
20+
Assert.Null(image.Settings.GetDefine(MagickFormat.Dcm, "display-range"));
21+
Assert.Null(image.Settings.GetDefine(MagickFormat.Dcm, "rescale"));
22+
Assert.Null(image.Settings.GetDefine(MagickFormat.Dcm, "window"));
23+
}
24+
}
25+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright Dirk Lemstra https://github.com/dlemstra/Magick.NET.
2+
// Licensed under the Apache License, Version 2.0.
3+
4+
using ImageMagick;
5+
using ImageMagick.Formats;
6+
using Xunit;
7+
8+
namespace Magick.NET.Tests;
9+
10+
public partial class DcmReadDefinesTests
11+
{
12+
public class TheRescaleProperty
13+
{
14+
[Fact]
15+
public void ShoulBeSetWhenTheValueIsFalse()
16+
{
17+
var defines = new DcmReadDefines()
18+
{
19+
Rescale = false,
20+
};
21+
22+
using var image = new MagickImage();
23+
image.Settings.SetDefines(defines);
24+
25+
Assert.Equal("false", image.Settings.GetDefine(MagickFormat.Dcm, "rescale"));
26+
}
27+
28+
[Fact]
29+
public void ShouldBeSetWhenTheValueIsTrue()
30+
{
31+
var defines = new DcmReadDefines()
32+
{
33+
Rescale = true,
34+
};
35+
36+
using var image = new MagickImage();
37+
image.Settings.SetDefines(defines);
38+
39+
Assert.Equal("true", image.Settings.GetDefine(MagickFormat.Dcm, "rescale"));
40+
}
41+
}
42+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright Dirk Lemstra https://github.com/dlemstra/Magick.NET.
2+
// Licensed under the Apache License, Version 2.0.
3+
4+
using ImageMagick;
5+
using ImageMagick.Formats;
6+
using Xunit;
7+
8+
namespace Magick.NET.Tests;
9+
10+
public partial class DcmReadDefinesTests
11+
{
12+
public class TheResetDisplayRangeProperty
13+
{
14+
[Fact]
15+
public void ShouldNotBeSetWhenTheValueIsFalse()
16+
{
17+
var defines = new DcmReadDefines()
18+
{
19+
ResetDisplayRange = false,
20+
};
21+
22+
using var image = new MagickImage();
23+
image.Settings.SetDefines(defines);
24+
25+
Assert.Null(image.Settings.GetDefine(MagickFormat.Dcm, "display-range"));
26+
}
27+
28+
[Fact]
29+
public void ShouldBeSetWhenTheValueIsTrue()
30+
{
31+
var defines = new DcmReadDefines()
32+
{
33+
ResetDisplayRange = true,
34+
};
35+
36+
using var image = new MagickImage();
37+
image.Settings.SetDefines(defines);
38+
39+
Assert.Equal("reset", image.Settings.GetDefine(MagickFormat.Dcm, "display-range"));
40+
}
41+
}
42+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Copyright Dirk Lemstra https://github.com/dlemstra/Magick.NET.
2+
// Licensed under the Apache License, Version 2.0.
3+
4+
using ImageMagick;
5+
using ImageMagick.Formats;
6+
using Xunit;
7+
8+
namespace Magick.NET.Tests;
9+
10+
public partial class DcmReadDefinesTests
11+
{
12+
public class TheWindowProperties
13+
{
14+
[Fact]
15+
public void ShouldSetTheCorrectValueWhenOnlyCenterIsSet()
16+
{
17+
var defines = new DcmReadDefines()
18+
{
19+
WindowCenter = 42,
20+
};
21+
22+
using var image = new MagickImage();
23+
image.Settings.SetDefines(defines);
24+
25+
Assert.Equal("42x", image.Settings.GetDefine(MagickFormat.Dcm, "window"));
26+
}
27+
28+
[Fact]
29+
public void ShouldSetTheCorrectValueWhenOnlyWidthIsSet()
30+
{
31+
var defines = new DcmReadDefines()
32+
{
33+
WindowWidth = 42,
34+
};
35+
36+
using var image = new MagickImage();
37+
image.Settings.SetDefines(defines);
38+
39+
Assert.Equal("x42", image.Settings.GetDefine(MagickFormat.Dcm, "window"));
40+
}
41+
42+
[Fact]
43+
public void ShouldSetTheCorrectValueWheWidthAndCenterAreSet()
44+
{
45+
var defines = new DcmReadDefines()
46+
{
47+
WindowCenter = 24,
48+
WindowWidth = 42,
49+
};
50+
51+
using var image = new MagickImage();
52+
image.Settings.SetDefines(defines);
53+
54+
Assert.Equal("24x42", image.Settings.GetDefine(MagickFormat.Dcm, "window"));
55+
}
56+
}
57+
}

0 commit comments

Comments
 (0)