Sorting Images in DO.NET
Sorting Images using DicomObjects.NET is slightly different from using the COM version, but the user has more flexibility as we provide an ArrayList wrapper to the DicomImageCollection object so that people can use all ArrayList’s intrinsic methods to arrange the sorting.
However, you still need to write your own “Comparer” routine in order to use the “Sort” method of the ArrayList object, and by doing so you can have customized sorting facilities to suit your need.
Following is some C# code to get you started.
The Comparer Classes
To sort Images in DicomImageCollection, you can create your own ImageComparer class
public class ImageComparerClass : IComparer
{
int IComparer.Compare(object a, object b)
{
// Cast the objects to DicomImage
DicomObjects.DicomImage ImageA = (DicomObjects.DicomImage) a;
DicomObjects.DicomImage ImageB = (DicomObjects.DicomImage) b;
// Sort AccessionNumber in ascending order
string strA = ImageA.AccessionNumber;
string strB = ImageB.AccessionNumber;
return( Decimal.Compare(Convert.ToDecimal(strA), Convert.ToDecimal(strB)));
}
}
To sort DataSets in DicomDataSetCollection, create your own DataSetComparer class
public class DataSetComparerClass : IComparer
{
int IComparer.Compare(object a, object b)
{
// Cast the objects to DicomDataSet
DicomObjects.DicomDataSet DataSetA = (DicomObjects.DicomDataSet) a;
DicomObjects.DicomDataSet DataSetB = (DicomObjects.DicomDataSet) b;
// Sort AccessionNumber in Descending order
string strA = DataSetA[0x0008, 0x0050].Value; //this equals to DataSetA.AccessionNumber
string strB = DataSetB[0x0008, 0x0050].Value; //this equals to DataSetB.AccessionNumber
return( Decimal.Compare(Convert.ToDecimal(strB), Convert.ToDecimal(strA)));
}
}
Get it Sorted!
The following code shows how to sort the DicomImageCollection
ArrayList imageList = new ArrayList(Viewer.Images.ToList()); // an ArrayList wrapper
ImageComparerClass myImageComparer = new ImageComparerClass();
//sort the entire collection
imageList.Sort(0, Viewer.Images.Count, myImageComparer);
Please note, the newly created ArrayList does NOT copy the contents of the Images collection, it only creates an ArrayList wrapper around the DicomImage collection, which derived from IList. Therefore changes to the Images collection also affect the ArrayList and vice versa.
Follow the link for more information about Sorting Images using COM version of DicomObejcts.