//public static object GetPageDicomData(DicomDataSet ds) //{ // MedicalViewerPageInfo output = null; // output = new MedicalViewerPageInfo(); // fillOutputWithDicomDataSet(output, ds); // output.Pages = GetPagesPresentationInfo(ds, output, 1); // return output; //} public static void GetPage(string pdiInstancePath, string pyramidFileName, string sopInstanceUid, object pageInfo) { MedicalViewerPageInfo output = pageInfo as MedicalViewerPageInfo; if (output == null) { return; } if (!string.IsNullOrEmpty(pyramidFileName)) { //var cat = PyramidImage.GetCatalouge(pyramidFileName, null); //if (cat != null) //{ // output.TileSize = cat.TileSize; // output.ImageUri = GetImageURI(sopInstanceUid); // { // var res = new List<LeadSize>(); // foreach (var r in cat.Resolutions) // res.Add(r); // output.Resolutions = res.ToArray(); // } //} } SaveMeta(pdiInstancePath, output); }
static List <MedicalViewerPageInfo> GetPagesInfoFromMaster(DicomDataSet ds, MedicalViewerPageInfo ppiMaster) { try { List <MedicalViewerPageInfo> ppiLst = new List <MedicalViewerPageInfo>(); DicomElement elemPerFrameFunctionalGroupsSequence = ds.FindFirstElement(null, DicomTag.PerFrameFunctionalGroupsSequence, true); List <DicomElement> elemImagePositionPatient = new List <DicomElement>(); FindChildElements(ds, elemPerFrameFunctionalGroupsSequence, DicomTag.ImagePositionPatient, elemImagePositionPatient); foreach (DicomElement de in elemImagePositionPatient) { MedicalViewerPageInfo ppi = new MedicalViewerPageInfo { ImageOrientationPatientArray = ppiMaster.ImageOrientationPatientArray, ImagePositionPatientArray = ds.GetDoubleValue(de, 0, 3), PixelSpacingPatientArray = ppiMaster.PixelSpacingPatientArray }; Normalize(ppi); ppiLst.Add(ppi); } return(ppiLst); } catch { return(new List <MedicalViewerPageInfo>()); } }
static MedicalViewerPageInfo[] GetPagesPresentationInfo(DicomDataSet ds, MedicalViewerPageInfo ppiMaster, int DefTotalPages) { int nFrames = DefTotalPages; DicomElement elemNumberOfFrames = ds.FindFirstElement(null, DicomTag.NumberOfFrames, true); string path = ExtractPDFData(ds); if (!string.IsNullOrEmpty(path)) { using (RasterCodecs codecs = new RasterCodecs()) { using (CodecsImageInfo info = codecs.GetInformation(path, true)) { nFrames = info.TotalPages; } } } else if (null != elemNumberOfFrames) { int[] nFramesList = ds.GetIntValue(elemNumberOfFrames, 0, 1); nFrames = Math.Max(nFrames, nFramesList[0]); } List <MedicalViewerPageInfo> PagePresentationInfoLstFromDS = GetPagesInfoFromMaster(ds, ppiMaster); List <MedicalViewerPageInfo> PagePresentationInfoLst = new List <MedicalViewerPageInfo>(); for (int nIndex = 0; nIndex < nFrames; nIndex++) { if (nIndex < PagePresentationInfoLstFromDS.Count) { PagePresentationInfoLst.Add(PagePresentationInfoLstFromDS[nIndex]); } else { PagePresentationInfoLst.Add(null); } } return(PagePresentationInfoLst.ToArray()); }
static void Normalize(MedicalViewerPageInfo presentation) { if (null != presentation.ImagePositionPatientArray) { if (presentation.ImagePositionPatientArray.Length == 0) { presentation.ImagePositionPatientArray = null; } } if (null != presentation.ImageOrientationPatientArray) { if (presentation.ImageOrientationPatientArray.Length == 0) { presentation.ImageOrientationPatientArray = null; } } if (null != presentation.PixelSpacingPatientArray) { if (presentation.PixelSpacingPatientArray.Length == 0) { presentation.PixelSpacingPatientArray = null; } } }
static void fillOutputWithDicomDataSet(MedicalViewerPageInfo output, DicomDataSet ds) { DicomElement elemImagePatientOrientation = ds.FindFirstElement(null, DicomTag.PatientOrientation, true); DicomElement elemImagePositionPatient = ds.FindFirstElement(null, DicomTag.ImagePositionPatient, true); DicomElement elemImageOrientationPatient = ds.FindFirstElement(null, DicomTag.ImageOrientationPatient, true); DicomElement elemImagerPixelSpacing = ds.FindFirstElement(null, DicomTag.ImagerPixelSpacing, true); DicomElement elemPixelSpacing = ds.FindFirstElement(null, DicomTag.PixelSpacing, true); DicomElement elemPhotometricInterpretation = ds.FindFirstElement(null, DicomTag.PhotometricInterpretation, true); if (null != elemPhotometricInterpretation) { string photometricInterpretation = ds.GetStringValue(elemPhotometricInterpretation, 0); output.SupportWindowLevel = photometricInterpretation == "MONOCHROME2" || photometricInterpretation == "MONOCHROME1"; } if (null != elemImagePatientOrientation) { int count = ds.GetElementValueCount(elemImagePatientOrientation); if (count > 0) { output.PatientOrientation = new string[count]; for (int index = 0; index < count; index++) { output.PatientOrientation[index] = ds.GetStringValue(elemImagePatientOrientation, index); } } } if (null != elemImagePositionPatient) { output.ImagePositionPatientArray = ds.GetDoubleValue(elemImagePositionPatient, 0, 3); if (output.ImagePositionPatientArray.Length == 0) { output.ImagePositionPatientArray = null; } } if (null != elemImageOrientationPatient) { output.ImageOrientationPatientArray = ds.GetDoubleValue(elemImageOrientationPatient, 0, 6); if (output.ImageOrientationPatientArray.Length == 0) { output.ImageOrientationPatientArray = null; } } if (null != elemPixelSpacing) { output.PixelSpacingPatientArray = ds.GetDoubleValue(elemPixelSpacing, 0, 2); if (output.PixelSpacingPatientArray.Length == 0) { output.PixelSpacingPatientArray = null; } } else if (null != elemImagerPixelSpacing) { output.PixelSpacingPatientArray = ds.GetDoubleValue(elemImagerPixelSpacing, 0, 2); if (output.PixelSpacingPatientArray.Length == 0) { output.PixelSpacingPatientArray = null; } } }