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 codecsDcmFileFormat 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 createddataset->chooseRepresentation(EXS_JPEGProcess14SV1TransferSyntax, ¶ms);// check if everything went wellif (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 changeddelete metaInfo->remove(DCM_MediaStorageSOPClassUID);delete metaInfo->remove(DCM_MediaStorageSOPInstanceUID);// store in lossless JPEG formatfileformat.saveFile(".\\test_jpeg.dcm", EXS_JPEGProcess14SV1TransferSyntax);}} DJEncoderRegistration::cleanup(); // deregister JPEG codecsreturn 0;
}
----------------------END----------------------------
DCMTK+VS2012编译简明教程相关推荐
- c语言程序链接过程,C语言简明教程(二):C程序编译链接过程和实例对照详解...
不像高级编程语言,在C语言开发中,了解其编译链接过程显得相对重要,因为C语言是较为底层的语言,很多时候我们调试C程序或者解决其它问题都可能会涉及到C编译链接的相关知识,例如编译动态库或者静态库.下面我 ...
- 基于LLVM的编译原理简明教程 (1) - 写编译器越来越容易了
基于LLVM的编译原理简明教程 (1) - 写编译器越来越容易了 进入21世纪,新的编程语言如雨后春笋一样不停地冒出来.需求当然是重要的驱动力量,但是在其中起了重要作用的就是工具链的改善. 2000年 ...
- CGIC简明教程(转摘)
CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库"CGIC"完成Web开发的各种要求. ********************************* 基础 ...
- kangle web server源代码安装简明教程
kangle web server源代码安装简明教程 - kangle使用交流 - kangle软件 是一款高性能web服务器,反向代理服务器,提供虚拟主机管理系统及代理服务器,web服务器架设 - ...
- 简明python教程pdf-python简明教程中文pdf
python简明教程中文pdf电子书是作者通过自己对计算机语言多年来的研究和学习得出的学习经验,对于python新手来说非常有用,值得大家下载学习. python简明教程中文pdf文章目录 1.介绍 ...
- Go Embed简明教程
Go Embed简明教程 go语言程序都是编译成二进制可执行文件的,但是实际执行时除了需要可执行程序,还需要一些静态文件,比如html模板等,于是就有人想如果Go官方能内建支持就好了.2019末一个提 ...
- 汇编 div_Solidity汇编开发简明教程
在用Solidity开发以太坊智能合约时,使用汇编可以直接与EVM交互,降低 gas开销成本,更精细的控制智能合约的行为,因此值得Solidity开发者学习 并加以利用.本文是Solidity汇编开发 ...
- C++操作SQLite简明教程
这篇文章主要介绍了C++操作SQLite简明教程,包含创建表.插入数据.查询数据等常用操作,需要的朋友可以参考下 SQLite是一款轻型的本地文件数据库,是遵守ACID的关联式数据库管理系统.它的设计 ...
- Go embed 简明教程
转载地址:Go embed 简明教程 Go编译的程序非常适合部署,如果没有通过CGO引用其它的库的话,我们一般编译出来的可执行二进制文件都是单个的文件,非常适合复制和部署.在实际使用中,除了二进制文件 ...
最新文章
- 计算机机房建设监理,机房工程建设监理工作要点讲解
- Asp.net的加密解密技巧--[转载]
- 【Android FFMPEG 开发】FFMPEG 解码 AVPacket 数据到 AVFrame ( AVPacket-解码器 | 初始化 AVFrame | 解码为 AVFrame 数据 )
- Python是如何进行内存管理的?
- 【转摘】如何得心应手的玩转Excel
- PLinq Lookup ParallelQuery
- CSS 编码中超级有用的工具集合
- 线段树||BZOJ1593: [Usaco2008 Feb]Hotel 旅馆||Luogu P2894 [USACO08FEB]酒店Hotel
- 10a 16a 插座区别_电动汽车小知识(NO·5):电动汽车能否用家里的插座进行充电?...
- windows下客户端连接上马上会断开连接_zookeeper系列客户端的骚操作amp; Curator使用...
- 阻滞增长模型求解_阻滞增长模型
- 计算机网络基础 课程设计体会,计算机网络课程设计心得体会.pdf
- 梁文道:盗版电影网站死去,我们仍然不见光明
- 刻录cd(不同系统的方式)
- linux驱动开发之九鼎板载蜂鸣器驱动测试【转】
- linux系统如何改电脑地址,如何修改电脑的操作系统MAC地址
- 下载谷歌浏览器以及谷歌浏览器不能加载网页问题的解决
- php表格调整行间距,excel如何调整行距
- Oracle日志挖掘之LogMiner
- 【C语言编程】求Fibonacci(斐波那契)数列前40个数