linux下dcmtk-3.6.1_20161102+openjpeg的编译

来源:互联网 发布:java为什么使用接口 编辑:程序博客网 时间:2024/06/10 20:36

1.解压

unzip dcmtk-3.6.1_20161102+openjpeg.zip

2.进入目录

cd dcmtk-3.6.1_20161102+openjpeg

3.创建build目录

mkdir build

4.进入build目录

cd build/

5.ccmake

ccmake ..

6.修改配置

BUILD_APPS                       OFF

BUILD_SHARED_LIBS                ON

7.make编译,到45%遇到如下错误

/opt/dcmtk-3.6.1_20161102+openjpeg/dcmjpeg/libsrc/j2k_lib.cxx:27:21: 致命错误:windows.h:没有那个文件或目录
 #include <windows.h>

8.修改

编辑文件/opt/dcmtk-3.6.1_20161102+openjpeg/dcmjpeg/libsrc/j2k_lib.cxx

修改成如下形式

//#include <windows.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>

9.安装

make install

10.cp -r /usr/local/lib/* /opt/compress/lib/复制库文件到指定目录

11.进入预加载配置目录

cd /etc/ld.so.conf.d/

12.编辑dcmtk.conf

vim dcmtk.conf

内容/opt/compress/lib

13.ldconfig加载配置

14..接下来编写解压缩程序#include "dcmtk/ofstd/ofstream.h"
#include "dcmtk/dcmpstat/dvpsdef.h"    /* for constants */
#include "dcmtk/dcmpstat/dviface.h"    /* for DVInterface */
#include "dcmtk/ofstd/ofstring.h"   /* for OFString */
#include "dcmtk/ofstd/ofbmanip.h"   /* for OFBitmanipTemplate */
#include "dcmtk/ofstd/ofdatime.h"   /* for OFDateTime */
#include "dcmtk/dcmdata/dcuid.h"      /* for dcmtk version name */
#include "dcmtk/dcmdata/cmdlnarg.h"   /* for prepareCmdLineArgs */
#include "dcmtk/ofstd/ofconapp.h"   /* for OFConsoleApplication */
#include "dcmtk/dcmimgle/dcmimage.h"
#include "dcmtk/dcmpstat/dvpspr.h"
#include "dcmtk/dcmpstat/dvpssp.h"
#include "dcmtk/dcmpstat/dvpshlp.h"     /* for class DVPSHelper */
#include "dcmtk/ofstd/ofstd.h"
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
#include "dcmtk/dcmdata/dcistrmf.h"
#include "dcmtk/dcmdata/libi2d/i2dbmps.h"
#include "dcmtk/dcmdata/dcpxitem.h"
#include "dcmtk/dcmjpeg/djdecode.h"
#include "dcmtk/dcmdata/dcvrfd.h"
#include "dcmtk/dcmjpeg/djencode.h"
#include "dcmtk/dcmjpeg/djrplol.h"
#include <iostream>
#include <string>  
int main(int argc,char *argv[])
{
    if(argc!=3){
        std::cout << "illegal parameters" << std::endl;
            return -1;
    }
    char* dcmPath= argv[1];
    char* compressPath = argv[2];

    DJDecoderRegistration::registerCodecs(); // register JPEG codecs
    DcmFileFormat fileformat;
    if (fileformat.loadFile(dcmPath).good())
    {
      DcmDataset *dataset = fileformat.getDataset();
      // decompress data set if compressed
      dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);
      // check if everything went well
      if (dataset->canWriteXfer(EXS_LittleEndianExplicit))
      {
        fileformat.saveFile(compressPath, EXS_LittleEndianExplicit);
      }
    }
    DJDecoderRegistration::cleanup();

    return 0 ;
}

15.编译文件

g++ uncompress.cpp -DHAVE_CONFIG_H -I/usr/local/include -L/usr/local/lib/ -pthread -lz -lcharls -lcmr -ldcmdata -ldcmdsig -ldcmfg -ldcmimage -ldcmimgle -ldcmiod -ldcmjpeg -ldcmjpls -ldcmnet -ldcmpmap -ldcmpstat -ldcmqrdb -ldcmrt -ldcmseg -ldcmsr -ldcmtls -ldcmtract -ldcmwlm -li2d -lijg12 -lijg16 -lijg8 -loflog -lofstd -o uncompress

16..运行并测试程序./uncompress /opt/a.dcm /opt/b.dcm 其中a.dcm是待处理文件,b.dcm是处理后的文件


原创粉丝点击