DCMTK+VS2012编译简明教程

 

环境:win7x64,VS2012,DCMTK3.6.0

 

DCMTK相关资料汇总:

※官方文档:http://support.dcmtk.org/docs-snapshot/

※源码、支持库下载:http://www.dcmtk.org/dcmtk.php.en

※github:https://github.com/DCMTK/dcmtk

※官方论坛:http://forum.dcmtk.org/viewforum.php?f=23&sid=667fbeb1f819e12c32c46432ea1621c4

※wiki(DCMTK的说明书,各类教程):http://support.dcmtk.org/redmine/projects/dcmtk/wiki/Howto

 

编译方法参考柳北风儿的教程:点击打开链接

 

1、下载DCMTK源码和支持库

 

支持库是dcmtk需要引用的第三方库,包括tiff、png、xml、zlib、openssl库

 

其中,库文件以“_d.lib”结尾的是debug版本的库,以“_o.lib”结尾的是release版本的库

在编译dcmtk之前,需要先在PC上配置好这些库,方法如下:

(a)搜索“_d.lib”,得到7个结果,重命名把所有的“_d”删除,然后将这些文件拷贝到VS2012的安装目录下的"\VC\lib\"

(b)搜索“include”,得到5个结果,将这些文件夹复制到VS2012的安装目录下的"VC",合并文件夹

(c)将“openssl-1.0.0c\bin”下的5个文件复制到VS2012的安装目录下的"\VC\bin\"

下一步就是编译dcmtk源码

 

2、编译源码

首先用CMAKE生成项目文件,步骤如下:

(a)设置CMAKE属性。在“dcmtk-3.6.0”目录下找到“CMakeLists.txt”,并打开,把所有的“/MT”替换为“/MD”;查找“# DCMTK build options”,把“DCMTK_WITH_TIFF、DCMTK_WITH_PNG、DCMTK_WITH_XML、DCMTK_WITH_ZLIB、DCMTK_WITH_OPENSSL”这5项都设为“ON”,保存。也可以不修改CMake文件,在cmake时勾选相应选项。

(b)生成项目文件。新建文件夹,用于存放编译好的文件,CMAKE设置路径、目标平台,其他默认。对于tiff、png、xml、zlib、openssl库要设置其目录。

然后用VS2012编译,步骤如下:

(a)打开刚刚生成的解决方案,Build一次“ALL_BUILD”

(b)Build一次"INSTALL"

最后编译结果放在C:\Program Files (x86)\DCMTK,包括lib、include和bin

 

*编译报错

error LNK2026: 模块对于 SAFESEH 映像是不安全的。

解决方法:1.逐个打开解决方案下的每个项目的“属性页”对话框。
2.单击“链接器”文件夹,有的项目没有。
3.单击“命令行”属性页。
4.将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用。

 

3、测试demo

借用了zssure的代码:点击打开链接

 

实现功能:对DCM图像进行JPEG压缩,最后保存为test_jpeg.dcm

项目属性配置:

 

1、包含目录:C:\Program Files (x86)\DCMTK\include,库目录:C:\Program Files (x86)\DCMTK\lib

2、“C/C++”->"代码生成"中的“运行库”设为“/MDd”

3、添加依赖项(视具体项目而不同):

netapi32.lib
wsock32.lib(注:这两个是windows自带的库,必须引用,否则编译报错,很郁闷官方并没有对此作出说明- -!)
ofstd.lib
oflog.lib
dcmimgle.lib
ijg8.lib
ijg12.lib
ijg16.lib
dcmdata.lib
dcmimage.lib
dcmjpeg.lib
dcmnet.lib
zlib.lib

具体的依赖关系在这里有所陈述:点击打开链接

#include "stdafx.h"
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
#include "dcmtk/dcmdata/dcpxitem.h"
#include "dcmtk/dcmjpeg/djdecode.h"
#include "dcmtk/dcmjpeg/djencode.h"
#include "dcmtk/dcmjpeg/djcodece.h"
#include "dcmtk/dcmjpeg/djrplol.h"

int _tmain(int argc, _TCHAR* argv[])
{
	DJEncoderRegistration::registerCodecs(); // register JPEG codecs
	DcmFileFormat fileformat;
	if (fileformat.loadFile("D:\\Document_x64\\Documents\\Visual Studio 2012\\Projects\\resource\\1.dcm").good())
	{
		DcmDataset *dataset = fileformat.getDataset();
		DcmItem *metaInfo = fileformat.getMetaInfo();
		DJ_RPLossless params; // codec parameters, we use the defaults

		// this causes the lossless JPEG version of the dataset to be created
		dataset->chooseRepresentation(EXS_JPEGProcess14SV1TransferSyntax, &params);
		// check if everything went well
		if (dataset->canWriteXfer(EXS_JPEGProcess14SV1TransferSyntax))
		{
			// force the meta-header UIDs to be re-generated when storing the file
			// since the UIDs in the data set may have changed
			delete metaInfo->remove(DCM_MediaStorageSOPClassUID);
			delete metaInfo->remove(DCM_MediaStorageSOPInstanceUID);

			// store in lossless JPEG format
			fileformat.saveFile(".\\test_jpeg.dcm", EXS_JPEGProcess14SV1TransferSyntax);
		}
	}   
	DJEncoderRegistration::cleanup(); // deregister JPEG codecs
	
	return 0;
}

 

 

 

----------------------END----------------------------

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值