diff --git a/DICOM [Unit Tests]/DICOM [Unit Tests].csproj b/DICOM [Unit Tests]/DICOM [Unit Tests].csproj
index 71e33273e..51dbb5942 100644
--- a/DICOM [Unit Tests]/DICOM [Unit Tests].csproj
+++ b/DICOM [Unit Tests]/DICOM [Unit Tests].csproj
@@ -71,6 +71,7 @@
+
diff --git a/DICOM [Unit Tests]/DicomDatasetTest.cs b/DICOM [Unit Tests]/DicomDatasetTest.cs
index 82435b922..2ecb927b6 100644
--- a/DICOM [Unit Tests]/DicomDatasetTest.cs
+++ b/DICOM [Unit Tests]/DicomDatasetTest.cs
@@ -16,55 +16,61 @@ public class DicomDatasetTest
[Fact]
public void Add_OtherDoubleElement_Succeeds()
{
+ var tag = DicomTag.DoubleFloatPixelData;
var dataset = new DicomDataset();
- dataset.Add(DicomTag.DoubleFloatPixelData, 3.45);
- Assert.IsType(typeof(DicomOtherDouble), dataset.First());
+ dataset.Add(tag, 3.45);
+ Assert.IsType(dataset.First(item => item.Tag.Equals(tag)));
}
[Fact]
public void Add_OtherDoubleElementWithMultipleDoubles_Succeeds()
{
+ var tag = DicomTag.DoubleFloatPixelData;
var dataset = new DicomDataset();
- dataset.Add(DicomTag.DoubleFloatPixelData, 3.45, 6.78, 9.01);
- Assert.IsType(typeof(DicomOtherDouble), dataset.First());
- Assert.Equal(3, dataset.Get(DicomTag.DoubleFloatPixelData).Length);
+ dataset.Add(tag, 3.45, 6.78, 9.01);
+ Assert.IsType(dataset.First(item => item.Tag.Equals(tag)));
+ Assert.Equal(3, dataset.Get(tag).Length);
}
[Fact]
public void Add_UnlimitedCharactersElement_Succeeds()
{
+ var tag = DicomTag.LongCodeValue;
var dataset = new DicomDataset();
- dataset.Add(DicomTag.LongCodeValue, "abc");
- Assert.IsType(typeof(DicomUnlimitedCharacters), dataset.First());
- Assert.Equal("abc", dataset.Get(DicomTag.LongCodeValue));
+ dataset.Add(tag, "abc");
+ Assert.IsType(dataset.First(item => item.Tag.Equals(tag)));
+ Assert.Equal("abc", dataset.Get(tag));
}
[Fact]
public void Add_UnlimitedCharactersElementWithMultipleStrings_Succeeds()
{
+ var tag = DicomTag.LongCodeValue;
var dataset = new DicomDataset();
- dataset.Add(DicomTag.LongCodeValue, "a", "b", "c");
- Assert.IsType(typeof(DicomUnlimitedCharacters), dataset.First());
- Assert.Equal("c", dataset.Get(DicomTag.LongCodeValue, 2));
+ dataset.Add(tag, "a", "b", "c");
+ Assert.IsType(dataset.First(item => item.Tag.Equals(tag)));
+ Assert.Equal("c", dataset.Get(tag, 2));
}
[Fact]
public void Add_UniversalResourceElement_Succeeds()
{
+ var tag = DicomTag.URNCodeValue;
var dataset = new DicomDataset();
- dataset.Add(DicomTag.URNCodeValue, "abc");
- Assert.IsType(typeof(DicomUniversalResource), dataset.First());
- Assert.Equal("abc", dataset.Get(DicomTag.URNCodeValue));
+ dataset.Add(tag, "abc");
+ Assert.IsType(dataset.First(item => item.Tag.Equals(tag)));
+ Assert.Equal("abc", dataset.Get(tag));
}
[Fact]
public void Add_UniversalResourceElementWithMultipleStrings_OnlyFirstValueIsUsed()
{
+ var tag = DicomTag.URNCodeValue;
var dataset = new DicomDataset();
- dataset.Add(DicomTag.URNCodeValue, "a", "b", "c");
- Assert.IsType(typeof(DicomUniversalResource), dataset.First());
+ dataset.Add(tag, "a", "b", "c");
+ Assert.IsType(dataset.First(item => item.Tag.Equals(tag)));
- var data = dataset.Get(DicomTag.URNCodeValue);
+ var data = dataset.Get(tag);
Assert.Equal(1, data.Length);
Assert.Equal("a", data.First());
}
@@ -72,15 +78,16 @@ public void Add_UniversalResourceElementWithMultipleStrings_OnlyFirstValueIsUsed
[Fact]
public void Add_PersonName_MultipleNames_YieldsMultipleValues()
{
+ var tag = DicomTag.PerformingPhysicianName;
var dataset = new DicomDataset();
dataset.Add(
- DicomTag.PerformingPhysicianName,
+ tag,
"Gustafsson^Anders^L",
"Yates^Ian",
"Desouky^Hesham",
"Horn^Chris");
- var data = dataset.Get(DicomTag.PerformingPhysicianName);
+ var data = dataset.Get(tag);
Assert.Equal(4, data.Length);
Assert.Equal("Desouky^Hesham", data[2]);
}
@@ -92,7 +99,7 @@ public void Add_MultiVMStringTags_YieldsMultipleValues(DicomTag tag, string[] va
var dataset = new DicomDataset();
dataset.Add(tag, values);
- Assert.IsType(expectedType, dataset.First());
+ Assert.IsType(expectedType, dataset.First(item => item.Tag.Equals(tag)));
var data = dataset.Get(tag);
Assert.Equal(values.Length, data.Length);
diff --git a/DICOM [Unit Tests]/DicomOtherByteTest.cs b/DICOM [Unit Tests]/DicomOtherByteTest.cs
new file mode 100644
index 000000000..2f5558f13
--- /dev/null
+++ b/DICOM [Unit Tests]/DicomOtherByteTest.cs
@@ -0,0 +1,105 @@
+// Copyright (c) 2012-2015 fo-dicom contributors.
+// Licensed under the Microsoft Public License (MS-PL).
+
+namespace Dicom
+{
+ using System;
+ using System.Linq;
+
+ using Xunit;
+
+ public class DicomOtherByteTest
+ {
+ #region Unit tests
+
+ [Fact]
+ public void Get_Short_ReturnsCorrectValue()
+ {
+ Get_SingleItem_ReturnsCorrectValue(63, (short)0x7f7e);
+ }
+
+ [Fact]
+ public void Get_ShortArray_ReturnsCorrectValue()
+ {
+ Get_Array_ReturnsCorrectValue(31, (short)0x3f3e, 128);
+ }
+
+ [Fact]
+ public void Get_UShort_ReturnsCorrectValue()
+ {
+ Get_SingleItem_ReturnsCorrectValue(63, (ushort)0x7f7e);
+ }
+
+ [Fact]
+ public void Get_UShortArray_ReturnsCorrectValue()
+ {
+ Get_Array_ReturnsCorrectValue(31, (ushort)0x3f3e, 128);
+ }
+
+ [Fact]
+ public void Get_Byte_ReturnsCorrectValue()
+ {
+ Get_SingleItem_ReturnsCorrectValue(63, (byte)0x3f);
+ }
+
+ [Fact]
+ public void Get_ByteArray_ReturnsCorrectValue()
+ {
+ Get_Array_ReturnsCorrectValue(31, (byte)0x1f, 256);
+ }
+
+ [Fact]
+ public void Get_UInt_ReturnsCorrectValue()
+ {
+ Get_SingleItem_ReturnsCorrectValue(63, (uint)0xfffefdfc);
+ }
+
+ [Fact]
+ public void Get_UIntArray_ReturnsCorrectValue()
+ {
+ Get_Array_ReturnsCorrectValue(31, (uint)0x7f7e7d7c, 64);
+ }
+
+ [Fact]
+ public void Get_Double_ReturnsCorrectValue()
+ {
+ var doubles = new double[1];
+ Buffer.BlockCopy(new byte[] { 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f }, 0, doubles, 0, 8);
+ Get_SingleItem_ReturnsCorrectValue(7, doubles[0]);
+ }
+
+ [Fact]
+ public void Get_DoubleArray_ReturnsCorrectValue()
+ {
+ var doubles = new double[1];
+ Buffer.BlockCopy(new byte[] { 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f }, 0, doubles, 0, 8);
+ Get_Array_ReturnsCorrectValue(15, doubles[0], 32);
+ }
+
+ #endregion
+
+ #region Helper methods
+
+ public static void Get_SingleItem_ReturnsCorrectValue(int index, T expected)
+ {
+ var element = new DicomOtherByte(
+ DicomTag.PixelData,
+ Enumerable.Range(0, 256).Select(i => (byte)i).ToArray());
+ var actual = element.Get(index);
+ Assert.Equal(expected, actual);
+ }
+
+ public static void Get_Array_ReturnsCorrectValue(int index, T expected, int expectedLength)
+ {
+ var element = new DicomOtherByte(
+ DicomTag.PixelData,
+ Enumerable.Range(0, 256).Select(i => (byte)i).ToArray());
+ var actual = element.Get();
+
+ Assert.Equal(expectedLength, actual.Length);
+ Assert.Equal(expected, actual[index]);
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/DICOM/DicomElement.cs b/DICOM/DicomElement.cs
index 5247f306a..c229ac75b 100644
--- a/DICOM/DicomElement.cs
+++ b/DICOM/DicomElement.cs
@@ -445,7 +445,7 @@ public IEnumerable Values
if (_values == null)
{
var values = new List();
- var parts = ByteBufferEnumerator.Create(Buffer).ToArray();
+ var parts = ByteConverter.ToArray(Buffer);
for (int i = 0; i < parts.Length; i += 2)
{
var group = parts[i + 0];
@@ -965,29 +965,29 @@ public override T Get(int item = -1)
{
if (!typeof(T).IsArray && item == -1) item = 0;
- if (typeof(T) == typeof(short)) return (T)(object)ByteBufferEnumerator.Create(Buffer).ToArray().GetValue(item);
+ if (typeof(T) == typeof(short)) return (T)(object)ByteConverter.Get(Buffer, item);
- if (typeof(T) == typeof(short[])) return (T)(object)ByteBufferEnumerator.Create(Buffer).ToArray();
+ if (typeof(T) == typeof(short[])) return (T)(object)ByteConverter.ToArray(Buffer);
- if (typeof(T) == typeof(ushort)) return (T)(object)ByteBufferEnumerator.Create(Buffer).ToArray().GetValue(item);
+ if (typeof(T) == typeof(ushort)) return (T)(object)ByteConverter.Get(Buffer, item);
- if (typeof(T) == typeof(ushort[])) return (T)(object)ByteBufferEnumerator.Create(Buffer).ToArray();
+ if (typeof(T) == typeof(ushort[])) return (T)(object)ByteConverter.ToArray(Buffer);
- if (typeof(T) == typeof(int)) return (T)(object)ByteBufferEnumerator.Create(Buffer).ToArray().GetValue(item);
+ if (typeof(T) == typeof(int)) return (T)(object)ByteConverter.Get(Buffer, item);
- if (typeof(T) == typeof(int[])) return (T)(object)ByteBufferEnumerator.Create(Buffer).ToArray();
+ if (typeof(T) == typeof(int[])) return (T)(object)ByteConverter.ToArray(Buffer);
- if (typeof(T) == typeof(uint)) return (T)(object)ByteBufferEnumerator.Create(Buffer).ToArray().GetValue(item);
+ if (typeof(T) == typeof(uint)) return (T)(object)ByteConverter.Get(Buffer, item);
- if (typeof(T) == typeof(uint[])) return (T)(object)ByteBufferEnumerator.Create(Buffer).ToArray();
+ if (typeof(T) == typeof(uint[])) return (T)(object)ByteConverter.ToArray(Buffer);
- if (typeof(T) == typeof(float)) return (T)(object)ByteBufferEnumerator.Create(Buffer).ToArray().GetValue(item);
+ if (typeof(T) == typeof(float)) return (T)(object)ByteConverter.Get(Buffer, item);
- if (typeof(T) == typeof(float[])) return (T)(object)ByteBufferEnumerator.Create(Buffer).ToArray();
+ if (typeof(T) == typeof(float[])) return (T)(object)ByteConverter.ToArray(Buffer);
- if (typeof(T) == typeof(double)) return (T)(object)ByteBufferEnumerator.Create(Buffer).ToArray().GetValue(item);
+ if (typeof(T) == typeof(double)) return (T)(object)ByteConverter.Get(Buffer, item);
- if (typeof(T) == typeof(double[])) return (T)(object)ByteBufferEnumerator.Create(Buffer).ToArray();
+ if (typeof(T) == typeof(double[])) return (T)(object)ByteConverter.ToArray(Buffer);
return base.Get(item);
}
diff --git a/DICOM/Imaging/DicomOverlayData.cs b/DICOM/Imaging/DicomOverlayData.cs
index 870e3e21b..181068b94 100644
--- a/DICOM/Imaging/DicomOverlayData.cs
+++ b/DICOM/Imaging/DicomOverlayData.cs
@@ -399,7 +399,7 @@ private IByteBuffer Load()
if (pixels.BitsAllocated == 8)
{
- var data = ByteBufferEnumerator.Create(frame).ToArray();
+ var data = IO.ByteConverter.ToArray(frame);
for (int y = oy; y < oh; y++)
{
@@ -416,7 +416,7 @@ private IByteBuffer Load()
else if (pixels.BitsAllocated == 16)
{
// we don't really care if the pixel data is signed or not
- var data = ByteBufferEnumerator.Create(frame).ToArray();
+ var data = IO.ByteConverter.ToArray(frame);
for (int y = oy; y < oh; y++)
{