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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
喷墨胶片打印系统的优势: 1、 胶片图像清晰、细腻,成本低廉:打印效果等同甚至超越传统柯达、柯尼卡、索尼、爱克发等干式相机输出; 2、 维护成本低廉:不用考虑传统干式相机保外维修的经济负担,因为我们采用的喷墨打印机市面上随时能买到,一年内几乎零故障,即使打印机本身发生故障,电脑维修人员也可轻易解决;   3、 首次胶片采购数量不受限制,我们不做捆绑式的合约销售:喷墨打印机您可以自行购买,也可委托我们代购。我们只需提供专用WindowsPriner喷墨胶片打印软件和胶片;   4、 不影响胶片的收费价格:喷墨胶片采用和传统干式胶片相同的PET基片,需要在观灯片下观看。市面上的纸质胶片,患者及大夫不认同,物价局也不允许按正常胶片价格收取;   5、 不影响您现在的干式相机工作:两套打印系统同时并用,互不干扰;   6、 胶片尺寸规格齐全:打印前可以任意更换;   7、 打印前的胶片有效期2年,打印后的胶片避光保存3年以上;   8、 专用WindowsPriner喷墨胶片打印软件涵盖CT、CR工作站软件的所有功能,而且可以实现拼版打印,将几个不同患者的图片打印到同一张胶片上,并且可以打印图文报告,模板词库齐全;   9、 关于老式模拟信号CT(水洗胶片),经过我们的模拟转数字改造后,直接连接喷墨胶片打印系统,能达到同样的传统干式相机输出效果;
特色功能: 任意胶片尺寸统一打印边距 无边距打印 支持自定义胶片尺寸8*10 14*17等且支持自动转换 支持条码授权打印张数 支持一个AETitle管理多台打印机 支持介质:纸胶片 蓝基胶片 PET胶片 功能概述: dicom打印服务器(PrintSCP)|dicom相机|PrintSCP|dicom胶片打印服务器|完全符合dicom3.0标准|与多家PACS产品对接通过 dicom打印服务器(PrintSCP),接收放射设备(CT、ECT、CR、DR、MRI、DSA等)或PACS工作站的“胶片打印”指令, 将胶片打印到Windows打印机,从而替代常规的激光相机,可大幅节省购置激光相机的高额费用、相机维护和激光胶片及其它耗材费用。 支持普通喷墨、激光打印机和Windows胶片打印机。 本软件仅需安装在连接本地打印机或网络打印机的电脑上即可,使用时无需其他操作。 支持参数: 1.支持符合Dicom3.0的所有设备、工作站、pacs Server,完全符合dicom3.0标准(西门子 GE 飞利浦 东芝 等CT MR DR...以及各类彩超&pacs). 2.连接方式与原有的标准Dicom接口的激光相机完全相同,配置AeTitle,Port,IP即可使用,与多家PACS产品对接通过 3.收到DICOM Printe打印任务后,自动转换成常规打印文档,支持仿真胶片图片导出,支持打印到任何标准的Windows本地打印机或网络打印机上。 4:支持彩色和黑白胶片打印 ,支持横向和纵向胶片打印,支持智能胶片尺寸识别打印
以下是使用 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、付费专栏及课程。

余额充值