public AddElementWithValue ( Dicom.Data.DicomTag tag, System.DateTime value ) : bool | ||
tag | Dicom.Data.DicomTag | |
value | System.DateTime | |
return | bool |
protected override void OnReceiveCFindRequest(byte presentationID, ushort messageID, DcmPriority priority, Dicom.Data.DcmDataset query) { TryInterpretStringsInDatasetUsingCorrectEncoding(query); Trace.WriteLine(String.Format("{0} Receive C-Find from {1} (marked as anonymous:{2})", DateTime.Now, this.Associate.CallingAE, _flagAnonymousAccess)); Trace.WriteLine(query.Dump()); using( var database = new MedicalISDataContext() ) { var queryLevel = query.GetString(DicomTags.QueryRetrieveLevel, null); if (queryLevel == "PATIENT") { IQueryable<Patient> patients = PatientQueries.GetMatchingPatients(database, query, _flagAnonymousAccess); patients = patients.Take(Settings.Default.MaxNumberOfStudiesReturned); foreach (var currentPatient in patients) { foreach (var currentStudy in currentPatient.Studies) { var p = currentPatient; var response = new DcmDataset { SpecificCharacterSetEncoding = query.SpecificCharacterSetEncoding }; // Map saved study tags to output response.AddElementWithValue(DicomTags.RetrieveAETitle, "CURAPACS"); response.AddElementWithValue(DicomTags.QueryRetrieveLevel, "PATIENT"); response.AddElementWithValue(DicomTags.PatientID, p.ExternalPatientID); response.AddElementWithValue(DicomTags.PatientsName, p.LastName + "^" + p.FirstName); response.AddElementWithValue(DicomTags.PatientsBirthDate, p.BirthDateTime.Value); response.AddElementWithValue(DicomTags.StudyInstanceUID, currentStudy.StudyInstanceUid); response.AddElementWithValue(DicomTags.AccessionNumber, currentStudy.AccessionNumber); response.AddElementWithValue(DicomTags.StudyDescription, currentStudy.Description); response.AddElementWithValue(DicomTags.ModalitiesInStudy, currentStudy.ModalityAggregation); if (currentStudy.PerformedDateTime.HasValue) { response.AddElementWithValue(DicomTags.StudyDate, currentStudy.PerformedDateTime.Value); response.AddElementWithValue(DicomTags.StudyTime, currentStudy.PerformedDateTime.Value); } response.AddElementWithValue(DicomTags.NumberOfStudyRelatedSeries, currentStudy.Series.Count); response.AddElementWithValue(DicomTags.NumberOfStudyRelatedInstances, (from s in currentStudy.Series select s.Images.Count).Sum()); if (_flagAnonymousAccess) AnonymizeDatasetBasedOnStudyInfo(response); SendCFindResponse(presentationID, messageID, response, DcmStatus.Pending); } } } else if (queryLevel == "STUDY") { IQueryable<Study> studies = StudyQueries.GetMatchingStudies(database, query, _flagAnonymousAccess); studies = studies.Take(Settings.Default.MaxNumberOfStudiesReturned); foreach (var currentStudy in studies) { var p = currentStudy.Patient; var response = new DcmDataset { SpecificCharacterSetEncoding = query.SpecificCharacterSetEncoding }; // Map saved study tags to output response.AddElementWithValue(DicomTags.RetrieveAETitle, "CURAPACS"); response.AddElementWithValue(DicomTags.QueryRetrieveLevel, "STUDY"); response.AddElementWithValue(DicomTags.PatientID, p.ExternalPatientID); response.AddElementWithValue(DicomTags.PatientsName, p.LastName + "^" + p.FirstName); response.AddElementWithValue(DicomTags.PatientsBirthDate, p.BirthDateTime.Value); response.AddElementWithValue(DicomTags.StudyInstanceUID, currentStudy.StudyInstanceUid); response.AddElementWithValue(DicomTags.AccessionNumber, currentStudy.AccessionNumber); response.AddElementWithValue(DicomTags.StudyDescription, currentStudy.Description); response.AddElementWithValue(DicomTags.ModalitiesInStudy, currentStudy.ModalityAggregation); if (currentStudy.PerformedDateTime.HasValue) { response.AddElementWithValue(DicomTags.StudyDate, currentStudy.PerformedDateTime.Value); response.AddElementWithValue(DicomTags.StudyTime, currentStudy.PerformedDateTime.Value); } response.AddElementWithValue(DicomTags.NumberOfStudyRelatedSeries, currentStudy.Series.Count); response.AddElementWithValue(DicomTags.NumberOfStudyRelatedInstances, (from s in currentStudy.Series select s.Images.Count).Sum()); if (! String.IsNullOrEmpty(query.GetString(DicomTags.PatientsSex, null))) { response.AddElementWithValue(DicomTags.PatientsSex, Settings.Default.AlwaysRespondWithGender); } if(_flagAnonymousAccess) AnonymizeDatasetBasedOnStudyInfo(response); Trace.WriteLine("response (STUDY): > "); Trace.WriteLine(response.Dump()); SendCFindResponse(presentationID, messageID, response, DcmStatus.Pending); } } else if (queryLevel == "SERIES") { IQueryable<Series> series = SeriesQueries.GetMatchingSeries(database, query); foreach (var currentSeries in series) { var response = new DcmDataset { SpecificCharacterSetEncoding = query.SpecificCharacterSetEncoding }; if (currentSeries.PerformedDateTime.HasValue) { response.AddElementWithValue(DicomTags.SeriesDate, currentSeries.PerformedDateTime.Value); response.AddElementWithValue(DicomTags.SeriesTime, currentSeries.PerformedDateTime.Value); } response.AddElementWithValue(DicomTags.QueryRetrieveLevel, "SERIES"); response.AddElementWithValue(DicomTags.StudyInstanceUID, currentSeries.StudyInstanceUid); response.AddElementWithValue(DicomTags.SeriesInstanceUID, currentSeries.SeriesInstanceUid); response.AddElementWithValue(DicomTags.SeriesNumber, currentSeries.SeriesNumber); response.AddElementWithValue(DicomTags.SeriesDescription, currentSeries.Description); response.AddElementWithValue(DicomTags.Modality, currentSeries.PerformedModalityType); response.AddElementWithValue(DicomTags.NumberOfSeriesRelatedInstances, currentSeries.Images.Count()); response.AddElementWithValue(DicomTags.ReferringPhysiciansName, ""); response.AddElementWithValue(DicomTags.StudyCommentsRETIRED, ""); SendCFindResponse(presentationID, messageID, response, DcmStatus.Pending); } } SendCFindResponse(presentationID, messageID, DcmStatus.Success); } }
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 void Transform(DcmDataset dataset) { dataset.AddElementWithValue(_tag, DicomUID.Generate()); }
public DcmDataset ToDataset() { DcmDataset dataset = new DcmDataset(); switch (QueryRetrieveLevel) { case DcmQueryRetrieveLevel.Patient: dataset.AddElementWithValue(DicomTags.QueryRetrieveLevel, "PATIENT"); dataset.AddElementWithValue(DicomTags.PatientID, PatientID); break; case DcmQueryRetrieveLevel.Study: dataset.AddElementWithValue(DicomTags.QueryRetrieveLevel, "STUDY"); if (!String.IsNullOrEmpty(PatientID)) dataset.AddElementWithValue(DicomTags.PatientID, PatientID); dataset.AddElementWithValue(DicomTags.StudyInstanceUID, StudyInstanceUID); break; case DcmQueryRetrieveLevel.Series: dataset.AddElementWithValue(DicomTags.QueryRetrieveLevel, "SERIES"); if (!String.IsNullOrEmpty(PatientID)) dataset.AddElementWithValue(DicomTags.PatientID, PatientID); if (!String.IsNullOrEmpty(StudyInstanceUID)) dataset.AddElementWithValue(DicomTags.StudyInstanceUID, StudyInstanceUID); dataset.AddElementWithValue(DicomTags.SeriesInstanceUID, SeriesInstanceUID); break; case DcmQueryRetrieveLevel.Image: dataset.AddElementWithValue(DicomTags.QueryRetrieveLevel, "IMAGE"); if (!String.IsNullOrEmpty(PatientID)) dataset.AddElementWithValue(DicomTags.PatientID, PatientID); if (!String.IsNullOrEmpty(StudyInstanceUID)) dataset.AddElementWithValue(DicomTags.StudyInstanceUID, StudyInstanceUID); if (!String.IsNullOrEmpty(SeriesInstanceUID)) dataset.AddElementWithValue(DicomTags.SeriesInstanceUID, SeriesInstanceUID); dataset.AddElementWithValue(DicomTags.SOPInstanceUID, SOPInstanceUID); break; default: break; } return dataset; }
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); }
private void PerformQueryOrRelease() { if (_moveQueries.Count > 0) { byte pcid = Associate.FindAbstractSyntax(MoveSopClassUID); if (Associate.GetPresentationContextResult(pcid) == DcmPresContextResult.Accept) { CMoveQuery query = _moveQueries.Dequeue(); DcmDataset dataset = new DcmDataset(Associate.GetAcceptedTransferSyntax(pcid)); switch (query.QueryRetrieveLevel) { case DcmQueryRetrieveLevel.Patient: dataset.AddElementWithValue(DicomTags.QueryRetrieveLevel, "PATIENT"); dataset.AddElementWithValue(DicomTags.PatientID, query.PatientID); break; case DcmQueryRetrieveLevel.Study: dataset.AddElementWithValue(DicomTags.QueryRetrieveLevel, "STUDY"); dataset.AddElementWithValue(DicomTags.PatientID, query.PatientID); dataset.AddElementWithValue(DicomTags.StudyInstanceUID, query.StudyInstanceUID); break; case DcmQueryRetrieveLevel.Series: dataset.AddElementWithValue(DicomTags.QueryRetrieveLevel, "SERIES"); dataset.AddElementWithValue(DicomTags.PatientID, query.PatientID); dataset.AddElementWithValue(DicomTags.StudyInstanceUID, query.StudyInstanceUID); dataset.AddElementWithValue(DicomTags.SeriesInstanceUID, query.SeriesInstanceUID); break; case DcmQueryRetrieveLevel.Image: dataset.AddElementWithValue(DicomTags.QueryRetrieveLevel, "IMAGE"); dataset.AddElementWithValue(DicomTags.PatientID, query.PatientID); dataset.AddElementWithValue(DicomTags.StudyInstanceUID, query.StudyInstanceUID); dataset.AddElementWithValue(DicomTags.SeriesInstanceUID, query.SeriesInstanceUID); dataset.AddElementWithValue(DicomTags.SOPInstanceUID, query.SOPInstanceUID); break; default: break; } _current = query; SendCMoveRequest(pcid, 1, DestinationAE, Priority, dataset); } else { Log.Info("{0} -> Presentation context rejected: {1}", LogID, Associate.GetPresentationContextResult(pcid)); SendReleaseRequest(); } } else { SendReleaseRequest(); } }
public string MakeGreyDicom(byte[] greybytes, ushort imgwidth, ushort imgheight) { DcmUID studyUid = DcmUID.Generate(); DcmUID seriesUid = DcmUID.Generate(studyUid, 1); DcmUID instUid = DcmUID.Generate(seriesUid, 1); DcmDataset data = new DcmDataset(DcmTS.ExplicitVRBigEndian);//.ImplicitVRLittleEndian ok data.AddElementWithValue(DcmTags.SOPClassUID, DcmUIDs.CTImageStorage);//ComputedRadiographyImageStorage ok //data.AddElementWithValue(DcmTags.SOPClassUID, DcmUIDs .SecondaryCapture); data.AddElementWithValue(DcmTags.StudyInstanceUID, studyUid); data.AddElementWithValue(DcmTags.SeriesInstanceUID, seriesUid); data.AddElementWithValue(DcmTags.SOPInstanceUID, instUid);//"1.3.6.1.4.1.30071.6.635719267134010719.1.1" //data.AddElementWithValue(DcmTags.MediaStorageSOPClassUID, DcmUIDs.ImplicitVRLittleEndian); //data.AddElementWithValueString(DcmTags.MediaStorageSOPClassUID, DcmUIDs.ComputedRadiographyImageStorage.ToString()); //type 2 attributes ////data.AddElement(DcmTags.PrinterStatus); if (tags.ContainsKey("0010,0020")) data.AddElementWithValueString(DcmTags.PatientID, tags["0010,0020"].Substring(5)); if (tags.ContainsKey("0010,0010")) data.AddElementWithValueString(DcmTags.PatientsName, tags["0010,0010"].Substring(5)); if (tags.ContainsKey("0010,0030")) data.AddElementWithValueString(DcmTags.PatientsBirthDate, tags["0010,0030"].Substring(5)); if (tags.ContainsKey("0010,0040")) data.AddElementWithValueString(DcmTags.PatientsSex, tags["0010,0040"].Substring(5)); if (tags.ContainsKey("0010,1010")) data.AddElementWithValueString(DcmTags.PatientsAge, tags["0010,1010"].Substring(5)); if (tags.ContainsKey("0008,0005")) data.AddElementWithValueString(DcmTags.SpecificCharacterSet, tags["0008,0005"].Substring(5)); if (tags.ContainsKey("0008,0008")) data.AddElementWithValueString(DcmTags.ImageType, tags["0008,0008"].Substring(5)); //if (tags.ContainsKey("0008,0016")) // data.AddElementWithValueString(DcmTags.ContentTime, DateTime.Now.ToString()); //if (tags.ContainsKey("0008,0018")) // data.AddElementWithValueString(DcmTags.ContentTime, DateTime.Now.ToString()); if (tags.ContainsKey("0008,0020")) data.AddElementWithValueString(DcmTags.StudyDate, tags["0008,0020"].Substring(5)); if (tags.ContainsKey("0008,0021")) data.AddElementWithValueString(DcmTags.SeriesDate, tags["0008,0021"].Substring(5)); if (tags.ContainsKey("0008,0022")) data.AddElementWithValueString(DcmTags.AcquisitionDate, tags["0008,0022"].Substring(5)); if (tags.ContainsKey("0008,0023")) data.AddElementWithValueString(DcmTags.ContentDate, tags["0008,0023"].Substring(5)); if (tags.ContainsKey("0008,002a")) data.AddElementWithValueString(DcmTags.AcquisitionDateTime, tags["0008,002a"].Substring(5)); if (tags.ContainsKey("0008,0030")) data.AddElementWithValueString(DcmTags.StudyTime, tags["0008,0030"].Substring(5)); if (tags.ContainsKey("0008,0031")) data.AddElementWithValueString(DcmTags.SeriesTime, tags["0008,0031"].Substring(5)); if (tags.ContainsKey("0008,0032")) data.AddElementWithValueString(DcmTags.AcquisitionTime, tags["0008,0032"].Substring(5)); if (tags.ContainsKey("0008,0033")) data.AddElementWithValueString(DcmTags.ContentTime, tags["0008,0033"].Substring(5)); if (tags.ContainsKey("0008,0050")) data.AddElementWithValueString(DcmTags.AcquisitionNumber, tags["0008,0050"].Substring(5)); if (tags.ContainsKey("0008,0060")) data.AddElementWithValueString(DcmTags.Modality, tags["0008,0060"].Substring(5)); if (tags.ContainsKey("0008,0070")) data.AddElementWithValueString(DcmTags.Manufacturer, tags["0008,0070"].Substring(5)); if (tags.ContainsKey("0008,0080")) data.AddElementWithValueString(DcmTags.InstitutionName, tags["0008,0080"].Substring(5)); if (tags.ContainsKey("0008,0081")) data.AddElementWithValueString(DcmTags.InstitutionAddress, tags["0008,0081"].Substring(5)); if (tags.ContainsKey("0008,0090")) data.AddElementWithValueString(DcmTags.ReferringPhysiciansName, tags["0008,0090"].Substring(5)); if (tags.ContainsKey("0008,1010")) data.AddElementWithValueString(DcmTags.StationName, tags["0008,1010"].Substring(5)); if (tags.ContainsKey("0008,1030")) data.AddElementWithValueString(DcmTags.StudyDescription, tags["0008,1030"].Substring(5)); if (tags.ContainsKey("0008,103e")) data.AddElementWithValueString(DcmTags.SeriesDescription, tags["0008,103e"].Substring(5)); if (tags.ContainsKey("0008,1090")) data.AddElementWithValueString(DcmTags.ManufacturersModelName, tags["0008,1090"].Substring(5)); if (tags.ContainsKey("0018,0010")) data.AddElementWithValueString(DcmTags.ContrastBolusAgent, tags["0018,0010"].Substring(5)); if (tags.ContainsKey("0018,0015")) data.AddElementWithValueString(DcmTags.BodyPartExamined, tags["0018,0015"].Substring(5)); if (tags.ContainsKey("0018,0050")) data.AddElementWithValueString(DcmTags.SliceThickness, tags["0018,0050"].Substring(5)); if (tags.ContainsKey("0018,0060")) data.AddElementWithValueString(DcmTags.KVP, tags["0018,0060"].Substring(5)); if (tags.ContainsKey("0018,0090")) data.AddElementWithValueString(DcmTags.DataCollectionDiameter, tags["0018,0090"].Substring(5)); if (tags.ContainsKey("0018,1000")) data.AddElementWithValueString(DcmTags.DeviceSerialNumber, tags["0018,1000"].Substring(5)); if (tags.ContainsKey("0018,1020")) data.AddElementWithValueString(DcmTags.SoftwareVersions, tags["0018,1020"].Substring(5)); if (tags.ContainsKey("0018,1030")) data.AddElementWithValueString(DcmTags.ProtocolName, tags["0018,1030"].Substring(5)); if (tags.ContainsKey("0018,1041")) data.AddElementWithValueString(DcmTags.ContrastBolusVolume, tags["0018,1041"].Substring(5)); if (tags.ContainsKey("0018,1042")) data.AddElementWithValueString(DcmTags.ContrastBolusStartTime, tags["0018,1042"].Substring(5)); if (tags.ContainsKey("0018,1043")) data.AddElementWithValueString(DcmTags.ContrastBolusStopTime, tags["0018,1043"].Substring(5)); if (tags.ContainsKey("0018,1044")) data.AddElementWithValueString(DcmTags.ContrastBolusTotalDose, tags["0018,1044"].Substring(5)); if (tags.ContainsKey("0018,1046")) data.AddElementWithValueString(DcmTags.ContrastFlowRate, tags["0018,1046"].Substring(5)); if (tags.ContainsKey("0018,1047")) data.AddElementWithValueString(DcmTags.ContrastFlowDuration, tags["0018,1047"].Substring(5)); if (tags.ContainsKey("0018,1049")) data.AddElementWithValueString(DcmTags.ContrastBolusIngredientConcentration, tags["0018,1049"].Substring(5)); if (tags.ContainsKey("0018,1100")) data.AddElementWithValueString(DcmTags.ReconstructionDiameter, tags["0018,1100"].Substring(5)); if (tags.ContainsKey("0018,1110")) data.AddElementWithValueString(DcmTags.DistanceSourceToDetector, tags["0018,1110"].Substring(5)); if (tags.ContainsKey("0018,1111")) data.AddElementWithValueString(DcmTags.DistanceSourceToPatient, tags["0018,1111"].Substring(5)); if (tags.ContainsKey("0018,1120")) data.AddElementWithValueString(DcmTags.GantryDetectorTilt, tags["0018,1120"].Substring(5)); if (tags.ContainsKey("0018,1130")) data.AddElementWithValueString(DcmTags.TableHeight, tags["0018,1130"].Substring(5)); if (tags.ContainsKey("0018,1140")) data.AddElementWithValueString(DcmTags.RotationDirection, tags["0018,1140"].Substring(5)); if (tags.ContainsKey("0018,1150")) data.AddElementWithValueString(DcmTags.ExposureTime, tags["0018,1150"].Substring(5)); if (tags.ContainsKey("0018,1151")) data.AddElementWithValueString(DcmTags.XRayTubeCurrent, tags["0018,1151"].Substring(5)); if (tags.ContainsKey("0018,1152")) data.AddElementWithValueString(DcmTags.Exposure, tags["0018,1152"].Substring(5)); if (tags.ContainsKey("0018,1160")) data.AddElementWithValueString(DcmTags.FilterType, tags["0018,1160"].Substring(5)); if (tags.ContainsKey("0018,1170")) data.AddElementWithValueString(DcmTags.GeneratorPower, tags["0018,1170"].Substring(5)); if (tags.ContainsKey("0018,1190")) data.AddElementWithValueString(DcmTags.FocalSpots, tags["0018,1190"].Substring(5)); if (tags.ContainsKey("0018,1200")) data.AddElementWithValueString(DcmTags.DateOfLastCalibration, tags["0018,1200"].Substring(5)); if (tags.ContainsKey("0018,1201")) data.AddElementWithValueString(DcmTags.TimeOfLastCalibration, tags["0018,1201"].Substring(5)); if (tags.ContainsKey("0018,1210")) data.AddElementWithValueString(DcmTags.ConvolutionKernel, tags["0018,1210"].Substring(5)); if (tags.ContainsKey("0018,5100")) data.AddElementWithValueString(DcmTags.PatientPosition, tags["0018,5100"].Substring(5)); //if (tags.ContainsKey("0020,000D")) // data.AddElementWithValueString(DcmTags.ContrastBolusStopTime, DateTime.Now.ToString()); //if (tags.ContainsKey("0020,000E")) // data.AddElementWithValueString(DcmTags.ContrastBolusStopTime, DateTime.Now.ToString()); if (tags.ContainsKey("0020,0010")) data.AddElementWithValueString(DcmTags.StudyID, tags["0020,0010"].Substring(5)); if (tags.ContainsKey("0020,0011")) data.AddElementWithValueString(DcmTags.SeriesNumber, tags["0020,0011"].Substring(5)); if (tags.ContainsKey("0020,0012")) data.AddElementWithValueString(DcmTags.AccessionNumber, tags["0020,0012"].Substring(5)); if (tags.ContainsKey("0020,0013")) data.AddElementWithValueString(DcmTags.InstanceNumber, tags["0020,0013"].Substring(5)); if (tags.ContainsKey("0020,0032")) data.AddElementWithValueString(DcmTags.ImagePositionPatient, tags["0020,0032"].Substring(5)); if (tags.ContainsKey("0020,0037")) data.AddElementWithValueString(DcmTags.ImageOrientationPatient, tags["0020,0037"].Substring(5)); if (tags.ContainsKey("0020,0052")) data.AddElementWithValueString(DcmTags.FrameOfReferenceUID, tags["0020,0052"].Substring(5)); if (tags.ContainsKey("0020,1040")) data.AddElementWithValueString(DcmTags.PositionReferenceIndicator, tags["0020,1040"].Substring(5)); if (tags.ContainsKey("0020,1041")) data.AddElementWithValueString(DcmTags.SliceLocation, tags["0020,1041"].Substring(5)); if (tags.ContainsKey("0020,4000")) data.AddElementWithValueString(DcmTags.ImageComments, tags["0020,4000"].Substring(5)); //data.AddElementWithValueString(DcmTags.StudyTime, DateTime.Now.ToString()); //data.AddElementWithValueString(DcmTags.AccessionNumber, ""); //data.AddElementWithValueString(DcmTags.ReferringPhysiciansName, ""); //data.AddElementWithValueString(DcmTags.StudyID, "1"); //data.AddElementWithValueString(DcmTags.SeriesNumber, "1"); //data.AddElementWithValueString(DcmTags.ModalitiesInStudy, "CT");//CR //data.AddElementWithValueString(DcmTags.Modality, "CT");//CR //data.AddElementWithValueString(DcmTags.NumberOfStudyRelatedInstances, "1"); //data.AddElementWithValueString(DcmTags.NumberOfStudyRelatedSeries, "1"); //data.AddElementWithValueString(DcmTags.NumberOfSeriesRelatedInstances, "1"); //data.AddElementWithValueString(DcmTags.PatientOrientation, "HFS");//F/A //data.AddElementWithValueString(DcmTags.ImageLaterality, "U"); if (tags.ContainsKey("0028,1050")) data.AddElementWithValueString(DcmTags.WindowCenter, "1113"); if (tags.ContainsKey("0028,1051")) data.AddElementWithValueString(DcmTags.WindowWidth, "749"); //data.AddElementWithValueString(DcmTags.WindowCenterWidthExplanation, "WINDOW1\\WINDOW2"); data.AddElementWithValueString(DcmTags.PixelRepresentation, "0"); data.AddElementWithValueString(DcmTags.RescaleIntercept, "0");//0 data.AddElementWithValueString(DcmTags.RescaleSlope, "1"); //data.AddElementWithValueString(DcmTags.RotationDirection, "CW"); //ushort bitdepth = 2;未使用过 DcmPixelData pixelData = new DcmPixelData(DcmTS.ImplicitVRLittleEndian); pixelData.PixelRepresentation = 0;//ok pixelData.ImageWidth = imgwidth; pixelData.ImageHeight = imgheight; pixelData.SamplesPerPixel = 1;//ok pixelData.HighBit = 15;//ok pixelData.BitsStored = 16;//ok pixelData.BitsAllocated = 16;//ok //pixelData.SamplesPerPixel = 1; //pixelData.HighBit = 7; //pixelData.BitsStored = 8; //pixelData.BitsAllocated = 8; pixelData.ImageType = "ORIGINAL\\PRIMARY\\AXIAL"; pixelData.PhotometricInterpretation = "MONOCHROME2";//2 byte gray? //ok //pixelData.FragmentSize //pixelData.IsLossy = true; //pixelData.LossyCompressionMethod = "01"; pixelData.PixelDataElement = DcmElement.Create(DcmTags.PixelData, DcmVR.OW); //OB: Other Byte, OW: Other Word //pixelData.AddFrame(bmpBytes); pixelData.AddFrame(greybytes); pixelData.UpdateDataset(data); DicomFileFormat ff = new DicomFileFormat(data); //string fileout = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "greyimg_test.dcm"); ff.Save(fileout, Dicom.DicomWriteOptions.Default);//Default ff = null; return fileout; }