DCMTK开发笔记(一):我的第一个DCMTK demo_CaLMdoWN_的博客-程序员ITS304_dcmtk

技术标签: DCMTK  

实验平台

实验步骤

  1. 在VS2010中新建Visual C++ Win32 控制台应用程序 空项目,命名为DcmtkDemo
  2. 在源文件中添加新建项 .cpp 文件,命名为main.cpp
  3. 粘贴如下测试代码,代码来源为 DICOM医学图像处理:基于DCMTK工具包学习和分析worklist
#include <stdio.h>
#include <tchar.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"
using namespace std;
 
int main()
{
    
	char uid[100];
	DcmFileFormat fileformat;
	DcmDataset *dataset = fileformat.getDataset();
	/**********************************************
	*
	*利用下列语句可以生成worklist的数据库文件,即
	*不含有影像信息的dcm文件
	*
	************************************************/
	dataset->putAndInsertString(DCM_SOPClassUID, UID_SecondaryCaptureImageStorage);
	dataset->putAndInsertString(DCM_SOPInstanceUID, dcmGenerateUniqueIdentifier(uid, SITE_INSTANCE_UID_ROOT));
	dataset->putAndInsertString(DCM_PatientName, "Doe^John");
	OFCondition status = fileformat.saveFile("D:\\DcmWorklist\\worklist\\test.wl", EXS_LittleEndianExplicit);
	if (status.bad())
		cerr << "Error: cannot write DICOM file (" << status.text() << ")" << endl;
 
	return 0;
}

3.将已编译好的DCMTK库拷贝至项目目录下(与DcmtkDemo.sln放在一个目录下),本机中位置为E:\Projects\DcmtkDemo\DCMTK
4. 设置项目属性

  • 点击项目>>属性>>配置属性>>常规>>字符集 将“使用Unicode字符集”改为 “使用多字节字符集”
    在这里插入图片描述
  • 属性->调试->环境 增加 path=$(SolutionDir)\DCMTK\bin; 重新启动VS
    在这里插入图片描述
  • 属性>>VC++目录>>包含目录 添加 $(SolutionDir)\DCMTK\include
    在这里插入图片描述
  • 属性>>C/C++>>代码生成>>运行库 改为 多线程调试 DLL (/MDd)
  • 属性>>链接器>>常规>>附加库目录 添加
    $(SolutionDir)\DCMTK\lib
  • 属性>>链接器>>输入>>附加依赖项 添加
Iphlpapi.lib
ws2_32.lib
wsock32.lib
netapi32.lib
ofstd.lib
oflog.lib
dcmdata.lib
dcmdsig.lib
dcmnet.lib
dcmsr.lib
dcmimgle.lib
dcmqrdb.lib
dcmtls.lib
dcmwlm.lib
dcmpstat.lib
dcmjpls.lib
dcmjpeg.lib
dcmimage.lib
charls.lib
ijg8.lib
ijg12.lib
ijg16.lib
i2d.lib
  1. 由于使用的dcmtk库是x64版本,生成时需要在配置管理器中将平台改为x64
  2. 编译运行

可能遇到的问题及解答

  1. 错误信息:
dcmtk\oflog\tracelog.h(59): error C2678: 二进制“+: 没有找到接受“const wchar_t [8]”类型的左操作数的运算符(或没有可接受的转换)
......
error C2665: “dcmtk::log4cplus::Logger::getInstance”: 2 个重载中没有一个可以转换所有参数类型
  • 原因:dcmtk不支持Unicode字符集,需要将字符集设置为多字节字符集
  • 解决方法:点击项目>>属性>>配置属性>>常规>>字符集 将“使用Unicode字符集”改为 “使用多字节字符集”
  1. 错误信息:
main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall DcmFileFormat::~DcmFileFormat(void)" (__imp_??1[email protected]@[email protected]),该符号在函数 _main 中被引用
.......
fatal error LNK1120: 15 个无法解析的外部命令
  • 原因:
    ①错误使用Win32平台进行Debug,导致无法识别用x64编译的dcmtk库
    ②未将 $(SolutionDir)\DCMTK\lib 添加 到链接器附加库目录
    ③未将相应 .lib 文件加入附加依赖项
  • 解决方法:
    ①生成时在配置管理器中将平台改为 x64
    ②属性>>链接器>>常规>>附加库目录 添加
    $(SolutionDir)\DCMTK\lib
    ③属性>>链接器>>输入>>附加依赖项 添加
Iphlpapi.lib
ws2_32.lib
wsock32.lib
netapi32.lib
ofstd.lib
oflog.lib
dcmdata.lib
dcmdsig.lib
dcmnet.lib
dcmsr.lib
dcmimgle.lib
dcmqrdb.lib
dcmtls.lib
dcmwlm.lib
dcmpstat.lib
dcmjpls.lib
dcmjpeg.lib
dcmimage.lib
charls.lib
ijg8.lib
ijg12.lib
ijg16.lib
i2d.lib
  1. 错误信息:程序生成成功,运行时出现错误
    在这里插入图片描述
    在这里插入图片描述
  • 原因:程序运行时找不到.dll库
  • 解决方法:属性->调试->环境 增加 path=$(SolutionDir)\DCMTK\bin; 重新启动VS2010
  1. error LNK2001: unresolved external XXX
    参见 Compilation of DCMTK-based program fails with LNK2001 [MSVC]
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Qinyimin001/article/details/103464749

智能推荐

SL651-2014 《水文监测数据通信规约》 中心站查询遥测站实时数据详解_A__wood的博客-程序员ITS304_水文监测数据通信规约

 SL651-2014 《水文监测数据通信规约》中心站查询遥测站实时数据详解全国水文标准化技术委员会水文仪器分技术委员会为适应我国水文仪器标准化工作的迅速发展,对用来监测河流、水库等水情的水文遥测终端RTU的数据通信制定了SL651-2014《水文监测数据通信规约》,本文将以蓝普lanpu-1802型水文遥测终端RTU为例,详细介绍SL651-2014《水文监测数据通信规约》要求的,中心站查询遥测...

Seasar的ORM框架Doma学习笔记系列1——安装设置_死鸡的博客-程序员ITS304_doma框架

官方网站:http://doma.seasar.org/index.htmlDoma的一大优势是完全实现了代码跟sql文件的分离。1. 安装设置 1)doma要求JDK1.6以上的JDBC。 2)把doma-x.x.x.jar包导入工程。 3)注解处理设定    工程属性,【Java Compiler】 - 【Annotation Processing】里,

这可能是目前最全的!这些细节在Java面试上要注意了_普通网友的博客-程序员ITS304

前言提到IT人员,人们的第一印象就是高薪资,包括转行来学Java的人绝大多数都是冲着高薪以及就业广泛来的。前段时间跟同学聊天,她说她老公在一家互联网公司做Java后台开发,年薪四十万,最近在准备复习,想着明年冲一波阿里p6或者p7。很多人都听过阿里的p级职位层级,那今天就跟大家“揭秘”一下,想要成为p7岗的Java技术专家你需要掌握哪些技术。本篇文章我将分成三个内容来讲:①了解阿里p级职位,大厂岗位薪资(2020)②阿里p7技术专家水平(Java岗)③如何让自己一步步贴近p7技术专家分享第

基于多重继承与信息内容的知网词语相似度计算 - 论文及代码讲解_机智翔学长的博客-程序员ITS304

论文:《基于多重继承与信息内容的知网词语相似度计算》-2017-张波,陈宏朝等 查看代码:https://github.com/yaleimeng/Final_word_Similarity总体感受:太乱了,有可能是之前没怎么接触这块。看论文,搞不懂怎么回事,义项、义原是啥,怎么这么多定义,到头来还是不懂两个词的相似度怎么计算,比哈工大词林那篇论文复杂多了。看代码,函数调来调去,一会这个...

《计算机操作系统》重点知识笔记整理(一)_Barry Yan的博客-程序员ITS304_计算机操作系统笔记

《计算机操作系统》重点知识总结1(1-4章)????注意:​ 这篇总结文档参考的配套书籍为《计算机操作系统》(第四版) 相关知识点关联的页码可能只与本书配套。????说明:​ 由于时间关系,该总结的部分知识点可能有所疏落或存在错误,请认真研读不要盲目学习,读者如有补充或问题更正请联系作者[[email protected]],作者将会表示感谢!​ 最后,希望尊重作者劳动成果,请大家转载时注明出处,Thanks!????第一章 操作系统引论1 操作系统的定义

高斯模糊(高斯滤波)原理以及计算过程_StriveZs的博客-程序员ITS304_高斯模糊公式

高斯模糊/高斯滤波通常,图像处理软件会提供模糊滤镜,使图片产生模糊效果。模糊的算法有很多,其中有一种叫高斯模糊(Gaussian Blur),它将正态分布用于图像处理。文本介绍了高斯模糊的算法,你会看到这是一个非常简单易懂的算法。本质上,它是一种数据平滑技术(data smoothing),适用于多个场合,图像处理恰好提供了一个直观的应用实例。高斯模糊的原理所谓模糊,可以理解成每一个像素都取周边像素的平均值。上图中,2是中间点,周边点都是1.中间点取周围点的平均值之后,就会从2变成了1.

随便推点

EXT4.0 (4~9章)学习资料_clever027的博客-程序员ITS304

第四章 MVC学习 从这个图中我们可以很清楚的看到M 、V、C在ExtJS4.0里面所对应数据类型。 靠右边是对应的代码结构。 下描述一下这model、store、view、controller以及application这几者之间的关系。(1)application:它是MVC的入口,用来告诉ExtJS到那里去找对应js文件以及启动加载controlle

2021年华为认证考试费用是多少_20004的博客-程序员ITS304_华为ip证书多少钱

有一些朋友打算在2021年参加华为网络工程师这方面的考试,所以想知道这方面的考试费用是多少,自己好有一个准备,那么网络工程师成长日记,作者小编来给大家介绍好让大家有一个准备如果你是找工作为目的的话,一般来说你至少要考华为hcip,也就是中级网络工程师以上这个认证,如果你非常清楚华为的初级,中级高级这三个级别,那么你也可以把最高级别这个认证作为你的考试目标所以首先你要考哪个级别是你需要自己心里清楚的华为的初级考试费用也就是1000多块钱华为的中级考试费用是480美金,折合成人民...

Flutter筑基——学好 Dart,才能玩转 Flutter_willwaywang6的博客-程序员ITS304

目录前言正文Dart 开发环境的搭建最后参考前言我们知道 Flutter 这个 UI 框架是使用 Dart 语言开发的,这说明要玩转 Flutter,就要先学好 Dart。那么,怎么学好 Dart 呢?有的同学抱着“不就是一门语言嘛”的心态,直接开始写 Flutter,然后遇到问题了,再去查看 Dart 的文档。这也是一种学习 Dart 的方式,但这种方式可能不适合大多数同学。庆幸地是,可以去查看 Dart 官网上的示例,比如Language-tour,就讲解了 Dart 的语法。但是,官网上的

破解使用radius实现802.1x认证的企业无线网络_Sword-heart的博客-程序员ITS304

0x01前言概述针对开放式(没有密码)无线网络的企业攻击,我个人感觉比较经典的攻击方式有2种,一种是eviltwin,一种是karma。karma应该是eviltwin攻击手法的升级版,攻击者只需要简单的监听客户端发的ssid探测和响应包就可以实现中间人了,受害者很少会有察觉。而且坊间曾有一个错误的认识,认为隐藏的ssid是不受karma影响的。但是实际情况是,客户端如果曾经连接过隐藏的ssid,也会广播这些网络的探测包。尽管karma这种攻击方式已经有10多年的历史了,但是在MAC OSX,ubunt

ffmpeg代码分析(1)--编译裁剪_茜茜她老爹的博客-程序员ITS304_ffmpeg 裁剪编译

我们很少使用到ffmpge完整的功能库,大部分时候,只需要特定的编解码 传输协议,那么该怎么裁剪ffmpeg呢?答案就是configure命令。configure 是一个文本文件,打开以后我们会发现它有很多命令,如下Help options:  --help                   print this message  --list-decoders        

推荐文章

热门文章

相关标签