private void TraceAcquisitionTime(IEnumerable <IPresentationImage> images) { foreach (IPresentationImage image in images) { if (image is DicomGrayscalePresentationImage) { DicomGrayscalePresentationImage dicomImage = (DicomGrayscalePresentationImage)image; DateTime?acqDate = DateParser.Parse(dicomImage.ImageSop.Frames[1].AcquisitionDate); DateTime?acqTime = TimeParser.Parse(dicomImage.ImageSop.Frames[1].AcquisitionTime); if (acqDate != null) { acqDate = acqDate.Value.AddTicks(acqTime.Value.Ticks); } else { acqDate = DateTimeParser.Parse(dicomImage.ImageSop.Frames[1].AcquisitionDateTime); } string line = string.Format("StudyUID: {0}, Series: {1}, Acq.Date/Time: {2}, Instance: {3}, Frame: {4}", dicomImage.ImageSop.StudyInstanceUid, dicomImage.ImageSop.SeriesInstanceUid, acqDate.Value.ToString(DateTimeParser.DicomFullDateTimeFormat), dicomImage.ImageSop.InstanceNumber, dicomImage.Frame.FrameNumber); Debug.WriteLine(line); } else { Debug.WriteLine("** Non-Dicom Image **"); } } }
private void TraceSliceLocation(IEnumerable <IPresentationImage> images) { foreach (IPresentationImage image in images) { if (image is DicomGrayscalePresentationImage) { DicomGrayscalePresentationImage dicomImage = (DicomGrayscalePresentationImage)image; Vector3D normal = dicomImage.Frame.ImagePlaneHelper.GetNormalVector(); Vector3D positionPatient = dicomImage.Frame.ImagePlaneHelper.ConvertToPatient( new PointF((dicomImage.Frame.Columns - 1) / 2F, (dicomImage.Frame.Rows - 1) / 2F)); Vector3D positionImagePlane = dicomImage.Frame.ImagePlaneHelper.ConvertToImagePlane(positionPatient, Vector3D.Null); double zImagePlane = Math.Round(positionImagePlane.Z, 3, MidpointRounding.AwayFromZero); string line = string.Format("StudyUID: {0}, Series: {1}, Normal: {2}, zPosition: {3}, Instance: {4}, Frame: {5}", dicomImage.ImageSop.StudyInstanceUid, dicomImage.ImageSop.SeriesInstanceUid, normal, zImagePlane, dicomImage.ImageSop.InstanceNumber, dicomImage.Frame.FrameNumber); Debug.WriteLine(line); } else { Debug.WriteLine("** Non-Dicom Image **"); } } }
protected AsyncDicomGrayscalePresentationImage(DicomGrayscalePresentationImage source, ICloningContext context) : base(source, context) { context.CloneFields(source, this); Initialize(); }
private void TestSortingDisplaySetsBySeriesNumber(bool reverse) { DisplaySetCollection orderedCollection = new DisplaySetCollection(); DisplaySetCollection nonOrderedCollection = new DisplaySetCollection(); for (int i = 1; i <= 20; ++i) { string id = i.ToString(); DisplaySet displaySet = new DisplaySet(id, id); ImageSop sop = NewImageSop(id, id, i); IPresentationImage image = new DicomGrayscalePresentationImage(sop.Frames[1]); sop.Dispose(); IImageSopProvider sopProvider = (IImageSopProvider)image; DicomMessageSopDataSource dataSource = ((DicomMessageSopDataSource)sopProvider.ImageSop.DataSource); dataSource.SourceMessage.DataSet[DicomTags.SeriesNumber].SetInt32(0, i); displaySet.PresentationImages.Add(image); orderedCollection.Add(displaySet); } Randomize(orderedCollection, nonOrderedCollection); Debug.WriteLine("Before Sort\n------------------------\n"); CollectionUtils.ForEach(nonOrderedCollection, delegate(IDisplaySet displaySet) { Debug.WriteLine(String.Format("name: {0}", displaySet.Name)); }); nonOrderedCollection.Sort(new SeriesNumberComparer(reverse)); Debug.WriteLine("\nAfter Sort\n------------------------\n"); CollectionUtils.ForEach(nonOrderedCollection, delegate(IDisplaySet displaySet) { Debug.WriteLine(String.Format("name: {0}", displaySet.Name)); }); int j = reverse ? 20 : 1; foreach (IDisplaySet set in nonOrderedCollection) { Assert.AreEqual(j.ToString(), set.Name); j += reverse ? -1 : 1; } foreach (DisplaySet set in nonOrderedCollection) { set.Dispose(); } foreach (DisplaySet set in orderedCollection) { set.Dispose(); } }
private IImageSet CreateImageSet(string patientId, string description) { string studyInstanceUid = DicomUid.GenerateUid().UID; string seriesInstanceUid = DicomUid.GenerateUid().UID; string sopInstanceUid = DicomUid.GenerateUid().UID; ImageSop sop = CreateImageSop(patientId, studyInstanceUid, seriesInstanceUid, sopInstanceUid); DicomGrayscalePresentationImage img = new DicomGrayscalePresentationImage(sop.Frames[1]); sop.Dispose(); DisplaySet displaySet = new DisplaySet(patientId, seriesInstanceUid); displaySet.PresentationImages.Add(img); ImageSet imageSet = new ImageSet(); imageSet.PatientInfo = description; imageSet.DisplaySets.Add(displaySet); return imageSet; }
private bool VerifyOrdered( PresentationImageCollection orderedCollection, PresentationImageCollection nonOrderedCollection) { Assert.AreEqual(orderedCollection.Count, nonOrderedCollection.Count); int index = 0; foreach (PresentationImage orderedImage in orderedCollection) { IPresentationImage nonOrderedImage = nonOrderedCollection[index]; if (!(orderedImage is DicomGrayscalePresentationImage) && !(nonOrderedImage is DicomGrayscalePresentationImage)) { ++index; continue; } if (!(orderedImage is DicomGrayscalePresentationImage) && (nonOrderedImage is DicomGrayscalePresentationImage)) { return(false); } if ((orderedImage is DicomGrayscalePresentationImage) && !(nonOrderedImage is DicomGrayscalePresentationImage)) { return(false); } DicomGrayscalePresentationImage dicomOrdered = orderedImage as DicomGrayscalePresentationImage; DicomGrayscalePresentationImage dicomNonOrdered = nonOrderedImage as DicomGrayscalePresentationImage; if (dicomOrdered.ImageSop.StudyInstanceUid != dicomNonOrdered.ImageSop.StudyInstanceUid || dicomOrdered.ImageSop.SeriesInstanceUid != dicomNonOrdered.ImageSop.SeriesInstanceUid || dicomOrdered.ImageSop.InstanceNumber != dicomNonOrdered.ImageSop.InstanceNumber) { return(false); } ++index; } return(true); }
private void TraceInstanceAndFrameNumbers(IEnumerable <IPresentationImage> collection) { foreach (IPresentationImage image in collection) { if (image is DicomGrayscalePresentationImage) { DicomGrayscalePresentationImage dicomImage = (DicomGrayscalePresentationImage)image; string line = string.Format("StudyUID: {0}, Series: {1}, Instance: {2}, Frame: {3}", dicomImage.ImageSop.StudyInstanceUid, dicomImage.ImageSop.SeriesInstanceUid, dicomImage.ImageSop.InstanceNumber, dicomImage.Frame.FrameNumber); Debug.WriteLine(line); } else { Debug.WriteLine("** Non-Dicom Image **"); } } }
private IImageSet CreateImageSet(string patientId, string description) { string studyInstanceUid = DicomUid.GenerateUid().UID; string seriesInstanceUid = DicomUid.GenerateUid().UID; string sopInstanceUid = DicomUid.GenerateUid().UID; ImageSop sop = CreateImageSop(patientId, studyInstanceUid, seriesInstanceUid, sopInstanceUid); DicomGrayscalePresentationImage img = new DicomGrayscalePresentationImage(sop.Frames[1]); sop.Dispose(); DisplaySet displaySet = new DisplaySet(patientId, seriesInstanceUid); displaySet.PresentationImages.Add(img); ImageSet imageSet = new ImageSet(); imageSet.PatientInfo = description; imageSet.DisplaySets.Add(displaySet); return(imageSet); }
private void TestSortingImageSetsByStudyDate(bool reverse, bool useSops, bool testLayoutManagerSort) { ImageSetCollection orderedCollection = new ImageSetCollection(); ImageSetCollection nonOrderedCollection = new ImageSetCollection(); StudyTree studyTree = new StudyTree(); for (int i = 0; i <= 20; ++i) { string id = i.ToString(); ImageSet imageSet = new ImageSet(); imageSet.Name = id; string studyDate; if (i == 0) { studyDate = ""; } else { studyDate = String.Format("200801{0}", i.ToString("00")); } if (useSops) { DisplaySet displaySet = new DisplaySet(id, id); ImageSop sop = NewImageSop(id, id, i); imageSet.Uid = sop.StudyInstanceUid; studyTree.AddSop(sop); IPresentationImage image = new DicomGrayscalePresentationImage(sop.Frames[1]); IImageSopProvider sopProvider = (IImageSopProvider)image; DicomMessageSopDataSource dataSource = ((DicomMessageSopDataSource)sopProvider.ImageSop.DataSource); dataSource.SourceMessage.DataSet[DicomTags.StudyDate].SetString(0, studyDate); imageSet.DisplaySets.Add(displaySet); displaySet.PresentationImages.Add(image); } else { StudyRootStudyIdentifier identifier = new StudyRootStudyIdentifier(); identifier.StudyDate = studyDate; identifier.StudyInstanceUid = id; ImageSetDescriptor descriptor = new DicomImageSetDescriptor(identifier); imageSet.Descriptor = descriptor; } orderedCollection.Add(imageSet); } if (reverse) { List <IImageSet> temp = new List <IImageSet>(); temp.AddRange(orderedCollection); temp.Reverse(); orderedCollection.Clear(); foreach (IImageSet imageSet in temp) { orderedCollection.Add(imageSet); } } Randomize(orderedCollection, nonOrderedCollection); Debug.WriteLine("Before Sort\n------------------------\n"); CollectionUtils.ForEach(nonOrderedCollection, imageSet => Debug.WriteLine(String.Format("name: {0}, date: {1}", imageSet.Name, ((IImageSopProvider)(imageSet.DisplaySets[0].PresentationImages[0])). ImageSop.StudyDate))); if (testLayoutManagerSort) { LayoutManager.SortImageSets(nonOrderedCollection, GetStudies(orderedCollection, studyTree)); } else { nonOrderedCollection.Sort(new StudyDateComparer(reverse)); } Debug.WriteLine("\nAfter Sort\n------------------------\n"); CollectionUtils.ForEach(nonOrderedCollection, imageSet => Debug.WriteLine(String.Format("name: {0}, date: {1}", imageSet.Name, ((IImageSopProvider)(imageSet.DisplaySets[0].PresentationImages[0])). ImageSop.StudyDate))); if (reverse) { nonOrderedCollection.RemoveAt(20); } else { nonOrderedCollection.RemoveAt(0); } int j = reverse ? 20 : 1; foreach (IImageSet set in nonOrderedCollection) { Assert.AreEqual(j.ToString(), set.Name); j += reverse ? -1 : 1; } foreach (IImageSet set in nonOrderedCollection) { set.Dispose(); } foreach (IImageSet set in orderedCollection) { set.Dispose(); } studyTree.Dispose(); }