鉴于我在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标头。对于同样的我正在摆弄使用它的语法? 有人可以共享任何示例代码吗?
答案 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);