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.