public static WindowLevel[] FromDataset(DcmDataset dataset) { List<WindowLevel> settings = new List<WindowLevel>(); if (dataset.Contains(DicomTags.WindowCenter) && dataset.Contains(DicomTags.WindowWidth)) { string[] wc = dataset.GetDS(DicomTags.WindowCenter).GetValues(); string[] ww = dataset.GetDS(DicomTags.WindowWidth).GetValues(); if (wc.Length != ww.Length) throw new DicomImagingException("Window Center count does not match Window Width count"); string[] desc = null; if (dataset.Contains(DicomTags.WindowCenterWidthExplanation)) { desc = dataset.GetLO(DicomTags.WindowCenterWidthExplanation).GetValues(); } for (int i = 0; i < wc.Length; i++) { double window; double level; if (!Double.TryParse(ww[i], out window) && !Double.TryParse(ww[i], System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out window)) throw new DicomImagingException("Unable to parse Window/Level [ww: {0}]", ww[i]); if (!Double.TryParse(wc[i], out level) && !Double.TryParse(wc[i], System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out level)) throw new DicomImagingException("Unable to parse Window/Level [wc: {0}]", wc[i]); string description = String.Empty; if (desc != null && i < desc.Length) description = desc[i]; settings.Add(new WindowLevel(description, window, level)); } } return settings.ToArray(); }