/// <summary> /// Initializes a new instance of the <see cref="DicomFileMetaInformation"/> class. /// </summary> /// <param name="dataset"> /// The data set for which file meta information is required. /// </param> public DicomFileMetaInformation(DicomDataset dataset) { ValidateItems = dataset.ValidateItems; Version = new byte[] { 0x00, 0x01 }; MediaStorageSOPClassUID = dataset.GetSingleValue <DicomUID>(DicomTag.SOPClassUID); MediaStorageSOPInstanceUID = dataset.GetSingleValue <DicomUID>(DicomTag.SOPInstanceUID); TransferSyntax = dataset.InternalTransferSyntax; ImplementationClassUID = DicomImplementation.ClassUID; ImplementationVersionName = DicomImplementation.Version; var aet = dataset.Contains(DicomTag.SourceApplicationEntityTitle) ? dataset.Get <string>(DicomTag.SourceApplicationEntityTitle) : null; if (aet != null) { SourceApplicationEntityTitle = aet; } if (dataset.TryGetSingleValue(DicomTag.SendingApplicationEntityTitle, out string sendingAETVal)) { SendingApplicationEntityTitle = sendingAETVal; } if (dataset.TryGetSingleValue(DicomTag.ReceivingApplicationEntityTitle, out string receivingAETVal)) { ReceivingApplicationEntityTitle = receivingAETVal; } if (dataset.TryGetSingleValue(DicomTag.PrivateInformationCreatorUID, out DicomUID privInfoCreator)) { PrivateInformationCreatorUID = privInfoCreator; } if (dataset.TryGetValues(DicomTag.PrivateInformation, out byte[] privInfo))
public void TryGet_SingleValue_Fail() { DicomDataset ds = new DicomDataset(); string testValue; bool success = ds.TryGetSingleValue(DicomTag.Modality, out testValue); Assert.False(success); }
/// <summary>Anonymizes a dataset witout cloning</summary> /// <param name="dataset">The dataset to be altered</param> public void AnonymizeInPlace(DicomDataset dataset) { var toRemove = new List <DicomItem>(); var itemList = dataset.ToArray(); var encoding = DicomEncoding.Default; if (dataset.TryGetSingleValue <string>(DicomTag.SpecificCharacterSet, out var characterSet)) { encoding = DicomEncoding.GetEncoding(characterSet); } foreach (var item in itemList) { var parenthesis = new[] { '(', ')' }; var tag = item.Tag.ToString().Trim(parenthesis); var action = Profile.FirstOrDefault(pair => pair.Key.IsMatch(tag)); if (action.Key != null) { var vr = item.ValueRepresentation; switch (action.Value) { case SecurityProfileActions.U: // UID case SecurityProfileActions.C: // Clean case SecurityProfileActions.D: // Dummy if (vr == DicomVR.UI) { ReplaceUID(dataset, item); } else if (vr.ValueType == typeof(string)) { ReplaceString(dataset, encoding, item, "ANONYMOUS"); } else { BlankItem(dataset, item, true); } break; case SecurityProfileActions.K: // Keep break; case SecurityProfileActions.X: // Remove toRemove.Add(item); break; case SecurityProfileActions.Z: // Zero-length BlankItem(dataset, item, false); break; default: throw new ArgumentOutOfRangeException(nameof(action)); } } if (item.Tag.Equals(DicomTag.PatientName) && Profile.PatientName != null) { ReplaceString(dataset, encoding, item, Profile.PatientName); } else if (item.Tag.Equals(DicomTag.PatientID) && Profile.PatientID != null) { ReplaceString(dataset, encoding, item, Profile.PatientID); } } dataset.Remove(item => toRemove.Contains(item)); }