打开 DICOM zip文件

本文介绍了如何在CSDN的一个简单DICOM浏览器项目中处理DICOMzip文件。通过创建UnzipDicomFile类,利用quazip库进行解压,将.zip文件的内容解压到本地目录,然后读取并加载DICOM影像。当用户尝试打开.zip文件时,程序会在内存中解压并判断文件类型,加载所需影像后删除临时解压目录。
摘要由CSDN通过智能技术生成

打开 DICOM zip文件

项目地址:
CodeChina kissDicomViewer
详细介绍:
CSDN 一个简单的 DICOM 浏览器


  小蚂蚁有一个功能,导入文件时支持DICOM zip文件,一般DICOM文件数量都比较多,大家相互拷贝的时候常常压缩成zip文件。小蚂蚁可以直接打开zip文件(读取里边所有的DICOM文件并显示)。小蚂蚁那么高的效率应该是自己实现zip文件的解压,在内存里直接判断是否DICOM文件,是的话直接拷贝出来。
  我能想到的自己可以实现的办法就是:如果载入文件后缀是.zip我就解压到本地一个目录,遍历里边所有文件,依次用DCMTK打开。把需要的影像加载到内存后删除本地解压缩的文件。

解压办法

  本来用的unzip,现在kissDicomViewer想做成夸平台的。虽然有现成的QZipWriterQzipreader。但是实际使用过才发现QZipWriter勉强能用,Qzipreader就是个坑。老老实实的把quazip加进来吧。用JlCompress::extractDir来解压。

class UnzipDicomFile : public QThread {
    Q_OBJECT
  public:
    explicit UnzipDicomFile() {}
    virtual ~UnzipDicomFile() override {}
    virtual void run() override;
    void SetPath(const QString &path);
  private:
    QString path_;
};

//-------------------------------------------------------
void UnzipDicomFile::run() {
    Kiss::FileUtil::DirRemove("./ZipCache");
    Kiss::FileUtil::DirMake("./ZipCache/");
    JlCompress::extractDir(this->path_, "./ZipCache/");
}

//-------------------------------------------------------
void UnzipDicomFile::SetPath(
    const QString &path) {
    this->path_ = path;
}

使用

  保留之前的打开文件逻辑,如果当前返回的只有一个文件并且后缀是.zip则使用UnzipDicomFile先解压到本地"./ZipCache"。让后读取这个文件夹。全部载入后删除本地"./ZipCache"

void ThumbnailBarWidget::appendImagePaths(
    const QStringList &paths, bool clear_old) {
    emit Signal_ImageLoadBegin();
    if(1 == paths.size() && paths.first().right(4) == ".zip") {
        QPointer<UnzipDicomFile> script_recoery_;
        script_recoery_ = new UnzipDicomFile();
        connect(script_recoery_, &UnzipDicomFile::finished,
        this, [&] {
            appendImagePaths(QStringList() << "./ZipCache", true);
        });
        connect(script_recoery_, &UnzipDicomFile::finished,
                script_recoery_, &UnzipDicomFile::deleteLater);
        script_recoery_->SetPath(paths.first());
        script_recoery_->start();
        return;
    }
/*
    原先打开文件方法
*/
    Kiss::FileUtil::DirRemove("./ZipCache");
    emit Signal_ImageLoadFinished();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beyond欣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值