/// <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))
Beispiel #2
0
        public void TryGet_SingleValue_Fail()
        {
            DicomDataset ds = new DicomDataset();
            string       testValue;

            bool success = ds.TryGetSingleValue(DicomTag.Modality, out testValue);

            Assert.False(success);
        }
Beispiel #3
0
        /// <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));
        }