private void InsertDatasetItem(DcmItem item, DicomReadOptions options) { if (_sds.Count > 0 && _sds.Count == _sqs.Count) { DcmDataset ds = _sds.Peek(); if (_tag.Element == 0x0000) { if (Flags.IsSet(options, DicomReadOptions.KeepGroupLengths)) { ds.AddItem(item); } } else { ds.AddItem(item); } if (ds.StreamLength != UndefinedLength) { long end = ds.StreamPosition + ds.StreamLength; if ((_stream.Position - _offset) >= end) { _sds.Pop(); } } } else { if (_tag.Element == 0x0000) { if (Flags.IsSet(options, DicomReadOptions.KeepGroupLengths)) { _dataset.AddItem(item); } } else { _dataset.AddItem(item); } } if (_tag == DicomTags.SpecificCharacterSet && item is DcmCodeString) { DcmCodeString cs = (DcmCodeString)item; if (cs.Length > 0) { string[] values = cs.GetValues(); for (int i = 0; i < values.Length; i++) { if (String.IsNullOrEmpty(values[i])) { continue; } _encoding = DcmEncoding.GetEncodingForSpecificCharacterSet(values[i]); break; } } } }
public bool Initialize() { _dataset.AddItem(new DcmItemSequence(DicomTags.ReferencedImageBoxSequence)); // Set Defaults FilmOrientation = FilmOrientation; FilmSizeID = FilmSizeID; MagnificationType = MagnificationType; MaxDensity = MaxDensity; BorderDensity = BorderDensity; EmptyImageDensity = EmptyImageDensity; MinDensity = MinDensity; Trim = Trim; RequestedResolutionID = RequestedResolutionID; string format = ImageDisplayFormat; if (String.IsNullOrEmpty(format)) { Debug.Log.Error("No display format present in N-CREATE Basic Image Box dataset"); return(false); } string[] parts = format.Split('\\'); if (parts[0] == "STANDARD" && parts.Length == 2) { parts = parts[1].Split(','); if (parts.Length == 2) { var col = int.Parse(parts[0]); var row = int.Parse(parts[1]); for (var r = 0; r < row; r++) { for (var c = 0; c < col; c++) { CreateImageBox(); } } return(true); } } if ((parts[0] == "ROW" || parts[0] == "COL") && parts.Length == 2) { parts = parts[1].Split(','); foreach (var count in parts.Select(int.Parse)) { for (var i = 0; i < count; i++) { CreateImageBox(); } } return(true); } Debug.Log.Error("Unsupported image display format \"{0}\"", format); return(false); }
private static void Save(XElement parent, DcmDataset dataset) { foreach (XElement attr in parent.Elements("attr")) { DicomTag tag = DicomTag.Parse(attr.Attribute("tag").Value); DicomVR vr = DicomVR.Lookup(attr.Attribute("vr").Value); int len = int.Parse(attr.Attribute("len").Value, CultureInfo.InvariantCulture); if (vr == DicomVR.SQ) { DcmItemSequence seq = new DcmItemSequence(tag); foreach (XElement itm in attr.Elements("item")) { DcmItemSequenceItem item = new DcmItemSequenceItem(); Save(itm, item.Dataset); seq.AddSequenceItem(item); } dataset.AddItem(seq); } else if (len == -1) { DcmFragmentSequence seq = new DcmFragmentSequence(tag, vr); bool first = true; foreach (XElement itm in attr.Elements("item")) { if (first) { SaveFragmentOffsetTable(itm, seq); first = false; } else { SaveFragmentItem(itm, seq); } } dataset.AddItem(seq); } else { DcmElement element = DcmElement.Create(tag, vr); element.SetValueString(attr.FirstText()); dataset.AddItem(element); } } }
protected override void AdditionalMembers(DcmDataset dataset) { dataset.AddElement(DicomTags.PatientsBirthDate); dataset.AddElement(DicomTags.PatientsSex); dataset.AddElement(DicomTags.PatientsAge); dataset.AddElement(DicomTags.PatientsSize); dataset.AddElement(DicomTags.PatientsWeight); dataset.AddElement(DicomTags.MedicalAlerts); dataset.AddElement(DicomTags.PregnancyStatus); dataset.AddElement(DicomTags.Allergies); //*Contrast allergies?? dataset.AddElement(DicomTags.PatientComments); dataset.AddElement(DicomTags.SpecialNeeds); //* dataset.AddElement(DicomTags.PatientState); //* dataset.AddElement(DicomTags.CurrentPatientLocation); //* dataset.AddElement(DicomTags.InstitutionName); dataset.AddElement(DicomTags.AdmissionID); dataset.AddElement(DicomTags.AccessionNumber); dataset.AddElement(DicomTags.ReferringPhysiciansName); dataset.AddElement(DicomTags.AdmittingDiagnosesDescription); dataset.AddElement(DicomTags.RequestingPhysician); dataset.AddElement(DicomTags.StudyInstanceUID); dataset.AddElement(DicomTags.RequestedProcedureDescription); dataset.AddElement(DicomTags.RequestedProcedureID); dataset.AddElement(DicomTags.ReasonForTheRequestedProcedure); dataset.AddElement(DicomTags.RequestedProcedurePriority); dataset.AddElement(DicomTags.StudyDate); //* dataset.AddElement(DicomTags.StudyTime); //* //DicomTags.RequestedProcedureCodeSequence //DicomTags.ScheduledProtocolCodeSequence DcmItemSequenceItem sps = new DcmItemSequenceItem(); sps.Dataset.AddElementWithValue(DicomTags.ScheduledStationAETitle, ScheduledStationAE); sps.Dataset.AddElement(DicomTags.ScheduledProcedureStepStartDate); sps.Dataset.GetDA(DicomTags.ScheduledProcedureStepStartDate).SetDateTimeRange(ScheduledProcedureStepStartDate); sps.Dataset.AddElement(DicomTags.ScheduledProcedureStepStartTime); sps.Dataset.GetTM(DicomTags.ScheduledProcedureStepStartTime).SetDateTimeRange(ScheduledProcedureStepStartTime); sps.Dataset.AddElementWithValue(DicomTags.Modality, Modality); sps.Dataset.AddElement(DicomTags.ScheduledPerformingPhysiciansName); sps.Dataset.AddElement(DicomTags.ScheduledProcedureStepDescription); sps.Dataset.AddElement(DicomTags.ScheduledProcedureStepLocation); sps.Dataset.AddElement(DicomTags.ScheduledProcedureStepID); DcmItemSequence sq = new DcmItemSequence(DicomTags.ScheduledProcedureStepSequence); sq.AddSequenceItem(sps); dataset.AddItem(sq); }
public void UpdateDataset(DcmDataset dataset) { if (_lossy) { DcmCodeString cs = dataset.GetCS(DicomTags.ImageType); if (cs != null) { string[] values = cs.GetValues(); values[0] = "DERIVED"; cs.SetValues(values); } dataset.AddElementWithValue(DicomTags.SOPInstanceUID, DicomUID.Generate()); // FIXME: append existing values dataset.AddElementWithValue(DicomTags.LossyImageCompression, "01"); dataset.AddElementWithValue(DicomTags.LossyImageCompressionMethod, _lossyMethod); dataset.AddElementWithValue(DicomTags.LossyImageCompressionRatio, _lossyRatio); } dataset.AddElementWithValue(DicomTags.NumberOfFrames, _frames); dataset.AddElementWithValue(DicomTags.Columns, _width); dataset.AddElementWithValue(DicomTags.Rows, _height); dataset.AddElementWithValue(DicomTags.HighBit, _highBit); dataset.AddElementWithValue(DicomTags.BitsStored, _bitsStored); dataset.AddElementWithValue(DicomTags.BitsAllocated, _bitsAllocated); dataset.AddElementWithValue(DicomTags.SamplesPerPixel, _samplesPerPixel); dataset.AddElementWithValue(DicomTags.PixelRepresentation, _pixelRepresentation); dataset.AddElementWithValue(DicomTags.PhotometricInterpretation, _photometricInterpretation); if (SamplesPerPixel == 1) { dataset.AddElementWithValue(DicomTags.RescaleSlope, _rescaleSlope); dataset.AddElementWithValue(DicomTags.RescaleIntercept, _rescaleIntercept); //if (_pixelPaddingValue != 0) // dataset.AddElementWithValue(DicomTags.PixelPaddingValue, _pixelPaddingValue); } else { dataset.AddElementWithValue(DicomTags.PlanarConfiguration, _planarConfiguration); } dataset.AddItem(_pixelDataItem); }
protected override void OnReceiveNGetRequest(byte presentationID, ushort messageID, DicomUID requestedClass, DicomUID requestedInstance, DicomTag[] attributes) { if (requestedClass == DicomUID.PrinterSOPClass && requestedInstance == DicomUID.PrinterSOPInstance) { DcmDataset ds = new DcmDataset(DicomTransferSyntax.ImplicitVRLittleEndian); ds.AddElementWithValue(DicomTags.PrinterStatus, "NORMAL"); ds.AddElementWithValue(DicomTags.PrinterStatus, "NORMAL"); ds.AddElementWithValue(DicomTags.PrinterName, _config.PrinterName); ds.AddElementWithValue(DicomTags.Manufacturer, "N/A"); ds.AddElementWithValue(DicomTags.ManufacturersModelName, "N/A"); ds.AddElementWithValue(DicomTags.DeviceSerialNumber, "N/A"); ds.AddElementWithValue(DicomTags.SoftwareVersions, "N/A"); ds.SetDateTime(DicomTags.DateOfLastCalibration, DicomTags.TimeOfLastCalibration, DateTime.Now); SendNGetResponse(presentationID, messageID, requestedClass, requestedInstance, ds, DcmStatus.Success); return; } if (requestedClass == DicomUID.PrintJobSOPClass) { DcmPrintJob job = null; foreach (DcmPrintJob pj in _jobs) { if (pj.SOPInstanceUID == requestedInstance) { job = pj; break; } } if (job == null) { job = new DcmPrintJob(requestedInstance); job.ExecutionStatus = "DONE"; job.CreationDateTime = DateTime.Today; job.PrintPriority = _session.PrintPriority; job.PrinterName = _config.PrinterName; job.Originator = Associate.CallingAE; } SendNGetResponse(presentationID, messageID, requestedClass, requestedInstance, job.Dataset, DcmStatus.Success); return; } if (requestedClass == DicomUID.PrinterConfigurationRetrievalSOPClass && requestedInstance == DicomUID.PrinterConfigurationRetrievalSOPInstance) { DcmDataset ds = new DcmDataset(DicomTransferSyntax.ImplicitVRLittleEndian); DcmDataset config = new DcmDataset(DicomTransferSyntax.ImplicitVRLittleEndian); DcmItemSequence sq = new DcmItemSequence(DicomTags.PrinterConfigurationSequence); sq.AddSequenceItem(config); ds.AddItem(sq); SendNGetResponse(presentationID, messageID, requestedClass, requestedInstance, ds, DcmStatus.Success); return; } SendAbort(DcmAbortSource.ServiceProvider, DcmAbortReason.NotSpecified); }
public bool Initialize() { _dataset.AddItem(new DcmItemSequence(DicomTags.ReferencedImageBoxSequence)); // Set Defaults FilmOrientation = FilmOrientation; FilmSizeID = FilmSizeID; MagnificationType = MagnificationType; MaxDensity = MaxDensity; //ConfigurationInformation = ConfigurationInformation; //SmoothingType = SmoothingType; BorderDensity = BorderDensity; EmptyImageDensity = EmptyImageDensity; MinDensity = MinDensity; Trim = Trim; RequestedResolutionID = RequestedResolutionID; //_dataset.AddItem(new DcmItemSequence(DicomTags.ReferencedBasicAnnotationBoxSequence)); //AnnotationDisplayFormatID = AnnotationDisplayFormatID; //_dataset.AddItem(new DcmItemSequence(DicomTags.ReferencedPresentationLUTSequence)); //Illumination = Illumination; //ReflectedAmbientLight = ReflectedAmbientLight; string format = ImageDisplayFormat; if (String.IsNullOrEmpty(format)) { Dicom.Debug.Log.Error("No display format present in N-CREATE Basic Image Box dataset"); return(false); } string[] parts = format.Split('\\'); if (parts[0] == "STANDARD" && parts.Length == 2) { parts = parts[1].Split(','); if (parts.Length == 2) { try { int row = int.Parse(parts[0]); int col = int.Parse(parts[1]); for (int r = 0; r < row; r++) { for (int c = 0; c < col; c++) { CreateImageBox(); } } return(true); } catch { } } } if ((parts[0] == "ROW" || parts[0] == "COL") && parts.Length == 2) { try { parts = parts[1].Split(','); foreach (string part in parts) { int count = int.Parse(part); for (int i = 0; i < count; i++) { CreateImageBox(); } } return(true); } catch { } } Dicom.Debug.Log.Error("Unsupported image display format \"{0}\"", format); return(false); }