コード例 #1
0
        public void GetEncoding_NonMatchingCharset_ReturnsUSASCII()
        {
            var expected = Encoding.ASCII.CodePage;
            var actual   = DicomEncoding.GetEncoding("GBK").CodePage;

            Assert.Equal(expected, actual);
        }
コード例 #2
0
        public void GetCharset_GB18030()
        {
            var expected = "GB18030";
            var encoding = DicomEncoding.GetEncoding("GB18030");
            var actual   = DicomEncoding.GetCharset(encoding);

            Assert.Equal(expected, actual);
        }
コード例 #3
0
        public void GetEncoding_GB18030() //https://github.com/fo-dicom/fo-dicom/issues/481
        {
            int codePage  = 0;
            var exception = Record.Exception(() => { codePage = DicomEncoding.GetEncoding("GB18030").CodePage; });

            Assert.Null(exception);
            Assert.Equal(54936, codePage);
        }
コード例 #4
0
ファイル: DicomPersonNameTest.cs プロジェクト: zinan/fo-dicom
 public void DicomPersonNameConstructorTest1()
 {
     DicomPersonName target = new DicomPersonName(DicomTag.PatientName, DicomEncoding.GetEncoding("ISO IR 144"), "Тарковский", "Андрей", "Арсеньевич");
     byte[] b = target.Buffer.GetByteRange(0, (int)target.Buffer.Size);
     byte[] c = Encoding.GetEncoding("iso-8859-5").GetBytes("Тарковский^Андрей^Арсеньевич");
     Assert.Equal(c, b);
     // foloowing test checks also padding with space!
     target = new DicomPersonName(DicomTag.PatientName, DicomEncoding.GetEncoding("ISO IR 144"), "Тарковский", "Андрей");
     b = target.Buffer.GetByteRange(0, (int)target.Buffer.Size);
     c = Encoding.GetEncoding("iso-8859-5").GetBytes("Тарковский^Андрей ");
     Assert.Equal(c, b);
 }
コード例 #5
0
        public void DicomFile_OpenUtf8Encoding_SwedishCharactersMaintained()
        {
            var expected = "Händer Å Fötter";
            var tag      = DicomTag.DoseComment;

            var dataset = new DicomDataset(
                new DicomUniqueIdentifier(DicomTag.SOPClassUID, DicomUID.RTDoseStorage),
                new DicomUniqueIdentifier(DicomTag.SOPInstanceUID, "1.2.3"),
                new DicomLongString(tag, DicomEncoding.GetEncoding("ISO IR 192"), expected));
            var outFile = new DicomFile(dataset);
            var stream  = new MemoryStream();

            outFile.Save(stream);

            stream.Seek(0, SeekOrigin.Begin);
            var inFile = DicomFile.Open(stream, DicomEncoding.GetEncoding("ISO IR 192"));
            var actual = inFile.Dataset.Get <string>(tag);

            Assert.Equal(expected, actual);
        }
コード例 #6
0
        public void DicomFile_OpenUtf8Encoding_SwedishCharactersMaintained()
        {
            var expected = "Händer Å Fötter";
            var tag      = DicomTag.DoseComment;

            var dataset = new DicomDataset(MinimumDatatset);

            dataset.Add(new DicomLongString(tag, DicomEncoding.GetEncoding("ISO IR 192"), expected));

            var outFile = new DicomFile(dataset);
            var stream  = new MemoryStream();

            outFile.Save(stream);

            stream.Seek(0, SeekOrigin.Begin);
            var inFile = DicomFile.Open(stream, DicomEncoding.GetEncoding("ISO IR 192"));
            var actual = inFile.Dataset.Get <string>(tag);

            Assert.Equal(expected, actual);
        }
コード例 #7
0
        public void Anonymize_PatientName_ShouldUseOriginalDicomEncoding()
        {
            const string fileName = "GH064.dcm";

#if NETFX_CORE
            var orignalDicom = Dicom.Helpers.ApplicationContent.OpenDicomFileAsync($"Data/{fileName}").Result;
#else
            var orignalDicom = DicomFile.Open($"./Test Data/{fileName}");
#endif

            var securityProfile = Dicom.DicomAnonymizer.SecurityProfile.LoadProfile(null, Dicom.DicomAnonymizer.SecurityProfileOptions.BasicProfile);
            securityProfile.PatientName = "kökö";

            var dicomAnonymizer = new Dicom.DicomAnonymizer(securityProfile);
            var anonymizedDicom = dicomAnonymizer.Anonymize(orignalDicom);

            // Ensure that we are using valid input data for test.
            Assert.Equal(Encoding.ASCII, DicomEncoding.Default);
            Assert.NotEqual(DicomEncoding.GetEncoding(orignalDicom.Dataset.GetString(DicomTag.SpecificCharacterSet)), DicomEncoding.Default);

            // Ensure DICOM encoding same as original.
            Assert.Equal(orignalDicom.Dataset.GetString(DicomTag.SpecificCharacterSet), orignalDicom.Dataset.GetString(DicomTag.SpecificCharacterSet));
            Assert.Equal("kökö", anonymizedDicom.Dataset.GetString(DicomTag.PatientName));
        }
コード例 #8
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));
        }