使用具有安全配置文件的

时间:2018-05-17 20:56:24

标签: c# class constructor

鉴于我在C#中非常天真并使用fo-dicom包,我一直在寻找如何使用DicomAnonymizer的不同安全配置文件的挑战,如下所示:https://fo-dicom.github.io/html/fff31967-d92f-28da-3106-d4ab34b9b65b.htm

我试过以下但不行:

DicomAnonymizer.SecurityProfile SecurityProfile = 1;
var anony = new DicomAnonymizer();
anony.Anonymize(testfile);

我想测试每个安全配置文件如何影响dicom标头。对于同样的我正在摆弄使用它的语法? 有人可以共享任何示例代码吗?

3 个答案:

答案 0 :(得分:2)

首先需要使用静态方法LoadProfile创建安全配置文件对象,然后在DicomAnonymizer构造函数中使用如下:

var profile = DicomAnonymizer.SecurityProfile.LoadProfile(null, DicomAnonymizer.SecurityProfileOptions.CleanGraph);
var anony = new DicomAnonymizer();

答案 1 :(得分:2)

我在您的代码中看到的另一个问题:static void mmap_object_dealloc(mmap_object *m_obj) { #ifdef MS_WINDOWS if (m_obj->data != NULL) UnmapViewOfFile (m_obj->data); if (m_obj->map_handle != NULL) CloseHandle (m_obj->map_handle); if (m_obj->file_handle != INVALID_HANDLE_VALUE) CloseHandle (m_obj->file_handle); if (m_obj->tagname) PyMem_Free(m_obj->tagname); #endif /* MS_WINDOWS */ #ifdef UNIX if (m_obj->fd >= 0) (void) close(m_obj->fd); if (m_obj->data!=NULL) { munmap(m_obj->data, m_obj->size); } #endif /* UNIX */ if (m_obj->weakreflist != NULL) PyObject_ClearWeakRefs((PyObject *) m_obj); Py_TYPE(m_obj)->tp_free((PyObject*)m_obj); } 将DicomDataset作为参数并返回一个新的匿名副本。如果您不希望修改原始DicomDataset,建议使用此方法。但是因此你考虑在内存中复制大量数据。 另一种方法是DicomDataset DicomAnonymizer.Anonymize(DicomDataset),它直接操作DicomDataset中的数据。

上面的代码使用第一种方法,但不会将返回的匿名DicomDataset存储到变量中,因此会立即将其释放到垃圾收集器。

呼叫  void DicomAnonymizer.AnonymizeInPlace(DicomDataset)  要么 var anonymizedTestfile = anony.Anonymize(testfile);

答案 2 :(得分:0)

如果查看枚举SecurityProfileOptions的定义,您会发现枚举被标记为[Flags],并且定义了以下值:

BasicProfile = 1,
RetainSafePrivate = 2,
RetainUIDs = 4,
RetainDeviceIdent = 8,
RetainPatientChars = 16, // 0x0010
RetainLongFullDates = 32, // 0x0020
RetainLongModifDates = 64, // 0x0040
CleanDesc = 128, // 0x0080
CleanStructdCont = 256, // 0x0100
CleanGraph = 512, // 0x0200

对问题的简短回答:您可以使用[strong] 按位或 来使用[Flags]属性来一次存储一个枚举值像这样的操作数:

SecurityProfileOptions.BasicProfile | SecurityProfileOptions.RetainDeviceIndent

我强烈建议您在this question上表现更好。

回到您的特定问题,您应该使用的配置文件的用法如下:

DicomAnonymizer.SecurityProfile securityProfile = DicomAnonymizer.SecurityProfile.LoadProfile(null, DicomAnonymizer.SecurityProfileOptions.BasicProfile | DicomAnonymizer.SecurityProfileOptions.CleanDesc |... [add as many as you want from that enum]);
  DicomAnonymizer dicomAnonymizer = new DicomAnonymizer(securityProfile);