dcm影像中的胶片打印模块的介绍使用-----胶片打印

续上篇  dcm影像中的胶片打印模块的介绍使用-----echo服务_小雷踩坑记的博客-CSDN博客

二. 胶片打印模块

(1)跟上一篇一样,创建一个胶片打印机ApplicationEntity(scp) 和本地客户端 scu

 这里就不细说了

(2)设置AAssociateRQ

AAssociateRQ rq = new AAssociateRQ();
final String printManagementSOPClass = printOptions.isColorPrint() ? TCloudDicomUID.BasicColorPrintManagementMetaSOPClass
        : TCloudDicomUID.BasicGrayscalePrintManagementMetaSOPClass;
rq.addPresentationContext(new PresentationContext(1, printManagementSOPClass, TCloudDicomUID.ImplicitVRLittleEndian));

这个其实是在 PresentationContext 里面设置打印是哪种打印服务

/** Basic Color Print Management Meta SOP Class,  */
public static final String BasicColorPrintManagementMetaSOPClass = "1.2.840.10008.5.1.1.18";

/** Basic Grayscale Print Management Meta SOP Class,  */
public static final String BasicGrayscalePrintManagementMetaSOPClass = "1.2.840.10008.5.1.1.9";

MetaSOPClass,是一系列SOP Class的集合,具体参见​ ​Meta SOP Class Definitions​​,Meta SOP Class中最常见的就是两种具体打印服务,即Basic Grayscale Print Management Meta SOP Class和Basic Color Print Management Meta SOP Class

在AAssociateRQ主要是通过addPresentationContext方法添加上下文信息.

(3) AAssociateRQ链接scp和scu

Association as = ae.connect(remoteAE, rq);

源码是scoket链接,上一篇已经提过了

(4) 链接好了之后,需要告诉打印机这个胶片的一些基础的信息,比如胶片的尺寸什么

首先这些基础信息需要塞到哪里,

信息集合应该被放在哪里,才能被传过去呢?上面确定了是什么打印服务,就往里面添加具体信息

(这个是其他博客的图,我贴过来了,原文在 DICOM协议中的UID详解_51CTO博客_dicom uid)

这些信息比如

Tag.FilmOrientation 
Tag.MagnificationType
Tag.BorderDensity...

这些字段的信息还是通过Attributes来设置对应的tag值

filmBoxAttrs.setString(Tag.FilmOrientation, VR.CS, printOptions.getFilmOrientation());

 注意一下,需要设置的有胶片基础属性(对应的分数等),胶片边框属性,胶片的图像属性,整体的结构如下,都是通过 Association 的 FutureDimseRSP 来代表一个部分,就是上文dicom中所说的一个BasicFilmSessionSOPClass.

as.ncreate(printManagementSOPClass, TCloudDicomUID.BasicFilmSessionSOPClass, filmSessionUID, filmSessionAttrs, TCloudDicomUID.ImplicitVRLittleEndian)

BasicFilmSessionSOPClass 属性包括: Tag.NumberOfCopies Tag.PrintPriority Tag.MediumType Tag.FilmDestination

BasicFilmBoxSOPClass 属性包括: Tag.FilmSizeID  Tag.FilmOrientation Tag.MagnificationType
Tag.Trim Tag.BorderDensity Tag.MinDensity等
BasicColorImageBoxSOPClass 属性包括: Tag.ImageBoxPosition  dicom 行列,窗宽窗位,图像,位数,像素什么的

上面的3个属性集合都 通过 Association FutureDimseRSP来装信息.

最后通过 Association 的 naction方法来发送信息.

(5)成功之后记得把刚才创建的

FutureDimseRSP 都清空了,这里可以用Association  的
ndelete方法

打印成功之后,会在jdicom的缓存路径下出现临时文件,

这些就是要打印的文件.可以打开看看,配置的参数对不对 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用 FO-DICOM打印彩色胶片的示例代码: ```c++ #include "dcmtk/config/osconfig.h" #include "dcmtk/dcmdata/dctk.h" #include "dcmtk/dcmimgle/dcmimage.h" #include "dcmtk/dcmimgle/digsdfn.h" #include "dcmtk/dcmimgle/diutils.h" #include "dcmtk/dcmimage/diregist.h" #include "dcmtk/dcmimage/diprint.h" int main(int argc, char *argv[]) { // 初始化 FO-DICOM 库 if (!dcmDataDict.isDictionaryLoaded()) { fprintf(stderr, "Error: no data dictionary loaded.\n"); return 1; } // 创建 DicomImage 对象 DicomImage *image = new DicomImage("input.dcm"); // 获取图像的宽度和高度 unsigned int width = image->getWidth(); unsigned int height = image->getHeight(); // 创建一个 DicomImagePrint 对象,并设置打印参数 DicomImagePrint *printer = new DicomImagePrint(); printer->setDestinationAE("PRINT_SCP"); printer->setPrintLUTShape(PLUT_SHAPE_IDENTITY); printer->setMagnificationType(DIMAGPRINT_REPLICATE); printer->setBorderDensity(0); printer->setEmptyImageDensity(255); // 设置打印参数,包括图像的位置、大小和颜色模式等 printer->setFilmSizeID("8INX10IN"); printer->setMagnificationType(DIMAGPRINT_REPLICATE); printer->setPrintObjectSides(DIMSE_PRINT_BOTH); printer->setPrintPriority(DIMSE_PRIORITY_MEDIUM); printer->setImageDisplayFormat(DIMSE_PRINT_PORTRAIT); printer->setImagePosition(1, 1); printer->setImageSize(width, height); printer->setColorMode(COLOR_MODE_FULL); // 设置打印胶片类型为彩色 printer->setFilmType(DIMSE_FILM_TYPE_DV); // 打印图像 printer->printImage(image); // 删除 DicomImagePrint 对象和 DicomImage 对象 delete printer; delete image; return 0; } ``` 在上述示例代码,我们首先创建了一个 DicomImage 对象,用于读取 DICOM 影像文件。然后,我们创建了一个 DicomImagePrint 对象,并设置打印参数。最后,我们调用 DicomImagePrint 对象的 printImage 方法,将图像打印胶片上。需要注意的是,我们在打印参数设置了打印胶片类型为彩色(DIMSE_FILM_TYPE_DV),从而实现了彩色胶片打印

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值