public void GetEncoding_NonMatchingCharset_ReturnsUSASCII() { var expected = Encoding.ASCII.CodePage; var actual = DicomEncoding.GetEncoding("GBK").CodePage; Assert.Equal(expected, actual); }
public void GetCharset_GB18030() { var expected = "GB18030"; var encoding = DicomEncoding.GetEncoding("GB18030"); var actual = DicomEncoding.GetCharset(encoding); Assert.Equal(expected, actual); }
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); }
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); }
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); }
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); }
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)); }
/// <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)); }