上一篇文章说到了DCM文件的无损压缩 DICOM DCM4CHE影像压缩

本想着压缩了就大功告成 在使用的时候可以大大减少网络上传输的时间 提高网站性能

但是新的问题又出现了

问题如下 代码中获取文件像素的时候取到的是 null

    public static Attributes loadDicomObject(File f) throws IOException {if (f == null){return null;}else{DicomInputStream dis = new DicomInputStream(f);//attr.setSpecificCharacterSet("GBK");return dis.readDataset(-1, -1);}}
Attributes attrs = loadDicomObject(file);
byte[] pixelData=attrs.getBytes(Tag.PixelData);//pixelData 为null

但是在取没有压缩的DCM源文件通过这段代码是可以取到的

到底压缩和没压缩有什么区别呢?

先用阅片工具看一下PixelData 的tag吧

这是源文件的PixelData tag值

这是压缩后的PixelData tag值

很明显的 VR 从OW 变成了OB Value 变空了 难怪取不上值

经过不断找资料研究 发现DCM压缩后 像素值会通过 Fragments 方式存

然后对代码进行修改

Object pixelData = attr.getValue(Tag.PixelData);
if (pixelData instanceof byte[]) {dicomPixels=(byte[])pixelData;
} else if (pixelData instanceof BulkData) {System.out.println("343434343");
} else if (pixelData instanceof Fragments) {Object [] aa= ((Fragments) pixelData).toArray();dicomPixels=(byte[])aa[1];
}

果然取上了压缩后的像素值

又想着终于解决了 可以愉快的玩耍了 结果新的问题又出来了

再用压缩后的像素值进行调节灰度时

居然这样了!!


居然马赛克了!

明显压缩后的源文件 像素也应该是压缩处理了

然后继续研究。。但是确实资料太少了 工期又有限

只好在用的时候先把压缩后的DCM文件 先进行解压 然后再获取 像素值使用了

1.添加对应的dcm4che的jar包
在pom.xml里:

       <dependency><groupId>org.dcm4che</groupId><artifactId>dcm4che-imageio</artifactId><version>5.21.0</version></dependency><dependency><groupId>org.dcm4che</groupId><artifactId>dcm4che-imageio-opencv</artifactId><version>5.21.0</version><scope>runtime</scope></dependency>
  1. 开始解压
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import org.dcm4che3.data.Attributes;
import org.dcm4che3.data.UID;
import org.dcm4che3.imageio.codec.Transcoder;public class Dcm4cheTranscode {public static void main(String[] args) {File src = new File("F:\\Desktop\\2238\\DX\\src.DCM"); //带有压缩协议的dicom原始文件File dest = new File("F:\\Desktop\\2238\\DX\\des.DCM"); //解压成未压缩的dicom目标文件try {transcodeWithTranscoder(src, dest);} catch (IOException e) {e.printStackTrace();}}public static void transcodeWithTranscoder(File src, final File dest) throws IOException {try (Transcoder transcoder = new Transcoder(src)) {transcoder.setDestinationTransferSyntax(UID.ExplicitVRLittleEndian);transcoder.setIncludeFileMetaInformation(true);transcoder.transcode(new Transcoder.Handler(){@Overridepublic OutputStream newOutputStream(Transcoder transcoder, Attributes dataset) throws IOException {return new FileOutputStream(dest);}});} catch (Exception e) {Files.deleteIfExists(dest.toPath());throw e;}}
}

目前是研究到这个份上 ,有更好的解决办法希望大神指点,我也会继续研究,不断学习的。。。有收获继续更新

使用dcm4che对压缩的dcm文件进行解压相关推荐

  1. 采用批处理命令对文件进行解压及采用SQLCMD进行数据库挂载

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 现在公司 ...

  2. java zip压缩 加密码_java 压缩成zip文件、解压zip文件(可设置密码)

    1.情景展示 java实现将文件夹进行压缩打包的功能及在线解压功能 2.解决方案 方式一:压缩.解压zip 准备工作:slf4j-api.jar org.slf4j slf4j-api 1.7.25 ...

  3. shell脚本根据不同的压缩包类型(rar和zip)分别进行解压

    shell脚本根据不同的压缩包类型(rar和zip)分别进行解压,注意传参: case $1 in*.zip)unzip -qq $1 -d $Temp_Dir;;*.rar)unrar x $1 $ ...

  4. DICOM笔记-解析JPEG压缩格式DCM文件

      项目中使用了DICOM文件保存图像,之前经常遇到DICOM内放置的是short类型或者float类型的二维图像,按照之前的代码处理JEPG压缩的DICOM文件,当然会出现问题:从网上查到资料,是由 ...

  5. java 使用7z进行解压_java调用7zip解压压缩包的实例

    前言 最近的项目中需要用到解压缩包的功能,客户给出的压缩包的格式主要是rar和zip,因此就打算使用java调用7zip的命令行进行解压文件,本文主要记录一下实现的过程以及其中遇到的问题. 7zip命 ...

  6. zip压缩多个文件,解压时不包含目录层级

    假设我们有个目录叫 dev,dev中有很多文件,我们想要将dev中的文件打包,名字可能叫dev.zip,但当我们解压的时候,不想要解压生成一个dev目录,想要直接解压在当前目录,这样如何压缩呢? # ...

  7. linux一次压缩多个文件,同时解压多个zip文件

    1. 查看所有文件: [root@localhost ebsupdate]# ls 3262919_ZHS  4607647_ZHS  7429271_ZHS              p420679 ...

  8. 以管理员权限来进行解压操作

    报错问题 解决方案 以管理员权限打开cmd 然后进入所需解压的压缩包路径下 执行cmd命令 start winrar x -y cfe-6.0.0.src.tar.xz(即所需解压压缩包名) x 用绝 ...

  9. C语言霍夫曼编码压缩,数据结构大作业——哈夫曼编码压缩BMP格式文件

    数据结构大作业--哈夫曼编码压缩BMP格式文件 首先需要了解BMP图像格式 BMP图像格式详解 其次需要了解哈夫曼编码如何对BMP文件进行压缩 哈夫曼压缩与解压缩 编程部分 使用的头文件 虽然这里用了 ...

最新文章

  1. java中Array和ArrayList区别
  2. Server2003PDC迁移到Server2008R2BDC
  3. 如何批量修改公式的字体
  4. 远程连接hive报错
  5. linux内核之数据机构
  6. php版本与vc运行库
  7. 博士德霸道软件_霸道+远程版7.0
  8. UG 6.0软件安装教程
  9. 显示器屏幕尺寸及分辨率
  10. pic单片机c语言計數,单片机教程:PIC单片机C语言程序设计(三)
  11. React初识--必知必会的jsx核心语法
  12. 2022年劳务员-通用基础(劳务员)考试题库及答案
  13. android 充电电压过压保护值修改
  14. 淘宝店铺如何好评置顶,如何通过好评留住客户?
  15. 入门SpringBoot-关于启动原理(五)(转)
  16. kafka踩坑、实践篇
  17. 移动布局阶段总结【博学谷学习记录】超强总结,用心分享
  18. win10ltsc安装后重启提示bitlocker有问题怎么办_TIA Portal博途常见的15大问题汇总
  19. 树莓派4B+Ubuntu 18.04 LTS + 桌面desktop + ros安装@树莓派4B、Ubuntu、desktop、ros
  20. 计算机毕业设计ssm物流信息管理系统35wzn系统+程序+源码+lw+远程部署

热门文章

  1. 学计算机专业可以学师范吗,师范学校的计算机专业,出来好找工作吗?有何方向?...
  2. 手游功能测试大中小公司区别
  3. git新建分支详细步骤
  4. ROS问题(1):如何解决连接不上主机的问题
  5. 新下载的阿里iconfont字体图标怎么更新到文件中(iconfont的类名引用法)
  6. 读paper总结(文献阅读经验分析总结)
  7. emmc存储安装linux,eMMC 分区管理
  8. 传感器数据采样率控制
  9. html怎么把图片放入边框,css3如何将图像设置为元素周围的边框
  10. jupyter notebook重命名失败修复方法