胶片打印、排版、自助打印(二)

news2024/11/23 2:26:29

一、DICOM打印的两种类型

灰度图像打印:

这里写图片描述

 彩色图像打印:这里写图片描述

 通常情况下RGB类型DICOM图像包含如下的内容:

  1. (0028,0010)Rows
    图像的高度

  2. (0028,0011)Columns
    图像的宽度

  3. (0028,0030)Pixel Spacing
    图像像素间距,读取Pixel Data的时候不需要,主要用于长度测量。

  4. (0028,0100)Bits Allocated
    一个像素取样点存储时分配到的位数,一般RGB的图像,每一个颜色通道都使用8位,所以一般取值为8。对于灰度图像,如果是256级灰阶,一般就是8位。如果高于256级灰阶,一般就采用16位。

  5. (0028,0101)Bits Stored
    一个像素取样点存储时使用到的位数。比方说示例中CT影像,采用的是4K灰阶,像素值取值范围为0~4095,所以使用到的位数为12位。

  6. (0028,0102)High Bit
    最高位序号,它定义了存储点在分配的内存中的排列方式,它的值是最后一个bit的序号。如果第一个bit放在0位,那么最后一个bit为Bits Stored -1。

  7. (0028,0103)Pixel Representation
    如果这个值为0, 这表明是无符号类型,其VR类型应该为US,Unsigned Short. 如果这个值为1, 这表明为有符号类型,其VR类型应该为SS,Signed Short.

  8. (0028,1050)Window Center 和 (0028,1051) Window Width
    窗宽窗位

  9. (0028,1052)Rescale Intercept 和 (0028,1053)Rescale Slope
    用于根据像素值计算原始值,比方说,CT可以用于计算HU值。
    比方说:HU = Rescale Slope * X + Rescale Intercept.

  10. PhotometricInterpretation 如是RGB图像,则其值为RGB

  11. Planar configuration (0028,0006)  定义了各个彩色通道值在Pixel Data中排列的排列方式。当此值为0的时候,它这样排列的RGBRGBRGBRGBRGB。
    当此值为1的时候,它是这样排列的:RRRRR……GGGGG…….BBBBB。

二、组建待打印的dataset

        构建待打印的dataset,图像部分相关代码如下:

if (EC_Normal == status) status = DVPSHelper::putStringValue(dataset, DCM_PhotometricInterpretation, photometric.c_str());
	if (EC_Normal == status) status = DVPSHelper::putUint16Value(dataset, DCM_SamplesPerPixel, samplesPerPixel);
	if (EC_Normal == status) status = DVPSHelper::putUint16Value(dataset, DCM_Rows, info.filmImage.height);
	if (EC_Normal == status) status = DVPSHelper::putUint16Value(dataset, DCM_Columns, info.filmImage.width);
	if (EC_Normal == status) status = DVPSHelper::putUint16Value(dataset, DCM_BitsAllocated, info.filmImage.bitStored);
	if (EC_Normal == status) status = DVPSHelper::putUint16Value(dataset, DCM_BitsStored, info.filmImage.bitStored);
	if (EC_Normal == status) status = DVPSHelper::putUint16Value(dataset, DCM_HighBit, info.filmImage.bitStored - 1);
	if (EC_Normal == status) status = DVPSHelper::putUint16Value(dataset, DCM_PixelRepresentation, 0);

 三、上层构建RGB图像数据

        作者使用Qt,所以定义RGB888格式的QImage图像,以限定像素排列顺序为RGBRGBRGBRGBRGB

QImage print_image = image.convertToFormat(QImage::Format_RGB888);

        获取bits,然后供dicom图像写入。

info.filmImage.bits = print_image.bits();

 四、打印图像分页

根据打印的序列图像总数和布局单元格数量,计算总页数:

		m_total = m_imageItems.size() / getFilmCount();
		if (m_imageItems.size() % getFilmCount() != 0)
			++m_total;
		if (m_total < 1)
			m_total = 1;

获取当前页关联图像列表:

int pageCount = getFilmCount();
	int start = (m_current -1) * pageCount;
	return m_imageItems.mid(start, pageCount);

 五、打印效果预览

灰度图像打印:

 彩色图像打印:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/559295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Niagara——概述

Niagara是最新一代VFX系统&#xff0c;无需程序员的帮助&#xff0c;即可创建丰富多彩的效果&#xff1b;高级用户还可自定义模块modules&#xff1b; 核心组件 SystemsEmittersModulesParameters systems systems是构建效果容器&#xff0c;创建不同类型效果元素以实现整体效果…

Python从多个表格中随机抽取数据加以处理后合并全部数据

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;基于其中每一个文件&#xff0c;随机从其中选取一部分数据&#xff0c;并将全部文件中随机获取的数据合并为一个新的Excel表格文件的方法。 首先&#xff0c;我们来明确一下本文的具体需求。…

免交互expect

免交互 一、expect1、环境安装2、基本命令2.1 脚本解释器2.2 spawn&#xff08;跟踪&#xff09;2.3 expect &#xff08;捕捉&#xff09;2.4 send&#xff08;发送&#xff09;2.5 结束符2.7 exp_continue2.8 send user2.9 接收参数 二、ssh无交互登录到远程服务器1、登录完成…

Android 自定义弹窗 附带搜索过滤功能

项目场景&#xff1a; 前两天要求在项目中添加个小功能&#xff0c;今天正好有时间随手写了一个小demo&#xff0c;过程分享给大家。以后如果有此类需求可直接移植使用。 需求是因为在下拉列表中选择一个项作为数据显示在界面上&#xff0c;但是所有的选项很多&#xff0c;下翻…

软件著作权容易搞吗?

没有代码、材料&#xff0c;只有一个软件名字就能拿证&#xff0c;你说容易不… 当然这是对我们软著一级代理来说&#xff0c;每年申请下证几千个软著。下面说说下证要点给大家避坑。人群覆盖高新企业、大学生、大学老师、互联网公司。 软件著作权想要轻松下证&#xff0c;必…

《微服务实战》 第十六章 Spring cloud stream应用

前言 https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit 官方定义Spring Cloud Stream是一个构建消息驱动微服务的框架。应用程序通过inputs或者outputs来与Spring Cloud Stream中binder对象交互。通过我们配置来binding(绑定),而Spring Cloud Stream的bin…

lwIP更新记06:申请 TCP 控制块(tcp_alloc)

从 lwIP-2.0.0 开始&#xff0c;申请 tcp_pcb 控制块的逻辑发生了变化。 每个 tcp 连接都必须有一个 PCB 控制块 &#xff0c;使用函数 tcp_new() 申请 PCB 控制块。tcp_new 函数代码如下所示&#xff1a; /*** Creates a new TCP protocol control block but doesnt place it…

进阶篇丨链路追踪(Tracing)很简单:常见问题排查

作者&#xff1a;涯海 经过前面多篇内容的学习&#xff0c;想必大部分同学都已经熟练掌握分布式链路追踪的基础用法&#xff0c;比如回溯链路请求轨迹&#xff0c;定位耗时瓶颈点&#xff1b;配置核心接口黄金三指标告警&#xff0c;第一时间发现流量异常&#xff1b;大促前梳…

公司刚来的测试,00后真卷,上班还没2年,跳到我们公司起薪20k....

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。 这不&#xff0c;前段时间我们公司来了个00后&#xff0c;工作都没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…

neo4j图形数据库

目录 1. neo4j简介1.1 什么是图形数据库1.2 什么是neo4j1.3 neo4j的特性1.4neo4j的优点1.5 neo4j的构建元素 2. 安装部署2.1 环境说明2.2 下载安装包2.3 解压安装包2.4 配置安装jdk环境2.5 配置neoj4全局变量2.6 修改neo4j配置文件2.7 服务基本操作2.8 测试访问 3. 使用DBeaver…

上门洗车小程序软件开发所需要的功能有哪些呢?

相信很多企业及投资者都想开发一款属于自己的小程序系统。那么一款专业好用的上门洗车小程序软件开发所需要的功能有哪些呢&#xff1f; 1. 用户注册与登录。 用户可以通过手机号码或微信账号进行注册和登录。注册后可以查看历史订单、评价技师、参加活动等。 …

浅析EasyCVR视频能力在自然灾害风险预警场景中的应用意义

一、方案背景 我国是自然灾害多发的国家&#xff0c;夏季也是灾害多发季节&#xff0c;山洪、泥石流、洪涝、冰雹、飓风、地震等自然灾害每年都给国家经济带来巨大的损失。建设自然灾害风险预警视频监控系统&#xff0c;实现对自然灾害的可视化预警监测和监管&#xff0c;并提…

分布式事务的21种武器 - 2

在分布式系统中&#xff0c;事务的处理分布在不同组件、服务中&#xff0c;因此分布式事务的ACID保障面临着一些特殊难点。本系列文章介绍了21种分布式事务设计模式&#xff0c;并分析其实现原理和优缺点&#xff0c;在面对具体分布式事务问题时&#xff0c;可以选择合适的模式…

【业务架构】业务驱动的推荐系统相关技术总结

什么是推荐系统 推荐系统是一种基于用户历史行为和属性信息为用户推荐个性化内容的技术。而业务驱动的推荐系统&#xff0c;是指根据业务需求&#xff0c;将推荐系统集成进业务流程中&#xff0c;通过推荐系统提高业务效率、提升用户体验等目的。以下是一些相关实现技术。 用户…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(一)

今天开始使用 vue3 ts 搭建一个项目管理的后台&#xff0c;因为文章会将项目的每一个地方代码的书写都会讲解到&#xff0c;所以本项目会分成好几篇文章进行讲解&#xff0c;我会在最后一篇文章中会将项目代码开源到我的GithHub上&#xff0c;大家可以自行去进行下载运行&…

C语言隐藏自己源码成lib静态库的和使用lib静态库的方法

首先从头开始创建一个新项目&#xff1a; 这个sub.c内的文件内容很简单&#xff0c;就写一个减法函数 // 定义一个减法函数&#xff0c;传入两个整数&#xff0c;返回差 int sub(int x, int y) { return x - y; } // 定义一个减法函数&#xff0c;传入两个整数&#xff0…

7. 数据库MySQL

本文介绍了数据库mysql的安装配置过程&#xff0c;以及通过VsCode调用数据库实现一些功能 一、安装 如果之前安装过&#xff0c;或者安装失败。清除MySQL缓存并重新安装&#xff1a;运行以下命令以清除所有MySQL缓存文件&#xff0c;并重新安装它们 sudo apt-get remove --pu…

JAVA基础(各种类)

Object类 1、Object类中有许多方法是用native修饰的&#xff0c;这些方法是本地方法&#xff0c;用C语言实现。 2、Object类的一些方法&#xff1a; clone()方法&#xff1a;需要继承Clonable接口&#xff0c;并覆写clone()&#xff0c;修改为public权限&#xff0c;原来为p…

Halcon中从两组点的对应关系生成仿射矩阵,及思考原理和代码实现

有几个算子有点类似&#xff0c;看了下区别 1.vector_to_rigid( : : Px, Py, Qx, Qy : HomMat2D) 2.vector_to_similarity( : : Px, Py, Qx, Qy : HomMat2D) 3.vector_to_aniso( : : Px, Py, Qx, Qy : HomMat2D) vector_to_rigid 这个是刚性变换&#xff0c; 只有旋转和平移…

参考企业微信日程 通过vue+elementUi编写一个按月统计会议的日程计划组件

这个组件的话 需要三个第三方依赖 npm install --save chinese-lunar-calendar sass sass-loader element-uisass因为我这里 还是习惯写sass样式 毕竟真的方便啊 chinese-lunar-calendar 是一款将日期转为农历的工具 element-ui主要是表格真的方便 在 项目src下的main.js入口…