DICOM医学图像处理:开源库mDCM与DCMTK的比较分析(一),JPEG无损压缩DCM图像(续)

本文详细分析了在 DICOM 图像处理中,开源库mDCM与DCMTK在JPEG无损压缩时的差异,特别是在C++和C#环境下的表现。在遇到mDCM在项目集成后无法正确注册JPEG编码器的问题后,通过日志发现是由于GetReferencedAssemblies函数未能返回所有引用程序集导致。通过对静态类和Singleton设计模式的探讨,指出C#静态类在某些情况下可以替代Singleton模式。文章提供了手动注册编码器的解决方案,并讨论了两种方法的优劣。
摘要由CSDN通过智能技术生成

背景:

        上周通过单步调试,找出了开源库mDCM与DCMTK在对DICOM图像进行JPEG无损压缩时的细小区别,并顺利实现了在C++和C#环境下对DICOM图像的压缩。但是问题接踵而至啊,随着项目的深入,发现在单独的测试工程中可以实现的mDCM版本,在嵌入到项目整体中后,却意外地出现了错误,并未顺利实现DICOM图像的JPEG无损压缩。因此需要继续详细对比分析mDCM与DCMTK两者,期望寻找原因。

问题分析:

        开启项目的日志功能后,得到的信息反馈为:

No registered codec for transfer syntax! 在 Dicom.Data.DcmDataset.ChangeTransferSyntax(DicomTransferSyntax newTransferSyntax, DcmCodecParameters parameters),在…………………………处。

        从日志得到的反馈来看,应该是JPEG的编码器注册失败。而编码器部分包含在mDCM开源库的Dicom.Codec64.dll程序集中。因此单步调试进入,查看工程是否顺利加载了Dicom.Codec64.dll模块

        首先单步进入的是上周测试用的独立工程JpegLossLess,通过在Program.cs中调用Dicom.Codec.DicomCodec.RegisterCodecs();使得程序进入到DicomCodec.cs文件,程序运行到静态类DicomCodec的静态方法RegisterCodecs内。

clip_image002

        如上图所示,方法RegisterCodecs内部通过C#的程序集的动态加载和反射技术,顺利识别了工程引用中添加的Dicom.dl程序集Dicom.Codec64.dll程序集

接下来单步调试到整体工程中,程序从主框架转移到我们手动添加的调用Dicom.Codec.DicomCodec.RegisterCodecs();函数处,如下图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zssure

己欲立而立人,己欲达而达人

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值