QSysInfo

博客提供了一个链接https://www.yuque.com/docs/share/21148c71-3836-48bc-8ec7-5f3cdb30448e?# ,可查看更多相关内容,但未明确具体内容信息。
bool ImageSocket::readDicomImage(QString filePath, quint16*& outputData, quint16& windowWidth , quint16& windowCenter ) { outputCurTime("readDicomImage "); #if 1 Q_UNUSED(outputData); // 获取文件大小(通过标准文件流) QFileInfo fileInfo(filePath); qint64 fileSizeBytes = fileInfo.size(); // 获取字节大小 if(fileSizeBytes<(m_nWidth*m_nHeight/4+1)){ return false; } DcmFileFormat fileFormat; OFCondition status = fileFormat.loadFile(filePath.toLocal8Bit().data()); // 检查文件加载是否成功 if (!status.good()) { qDebug() << "无法加载DICOM文件"; return false; } DcmDataset* dataset = fileFormat.getDataset(); // 强制转换为未压缩格式 if (dataset->chooseRepresentation(EXS_LittleEndianExplicit, nullptr).bad()) { qWarning() << "无法转换像素数据格式"; return false; } Float64 window_center, window_width; // 获取窗宽(0028,1051) dataset->findAndGetFloat64(DCM_WindowWidth,window_width); // 获取窗位(0028,1050) dataset->findAndGetFloat64(DCM_WindowCenter, window_center); //qDebug()<<"windowWidth "<<window_width<<"windowCenter "<<window_center; windowWidth = (quint16)window_width; windowCenter = (quint16)window_center; // m_nCurWW = (quint16)window_width; // m_nCurWL = (quint16)window_center; //以后的窗宽窗位获取均在此处 m_list.first = windowCenter - windowWidth/2; m_list.second = windowCenter + windowWidth/2; const quint16* pixelData = nullptr; unsigned long length = 0; // 检查像素数据有效性 if (dataset->findAndGetUint16Array(DCM_PixelData, pixelData, &length).good() && pixelData != nullptr && length > 0) { // 动态获取图像尺寸 Uint16 rows = 0, cols = 0; if (!dataset->findAndGetUint16(DCM_Rows, rows).good() || !dataset->findAndGetUint16(DCM_Columns, cols).good()) { qWarning() << "Failed to read image dimensions"; return false; } // 处理字节序 QByteArray dcmData; const E_TransferSyntax ts = dataset->getCurrentXfer(); const bool needSwap = (ts == EXS_LittleEndianImplicit && QSysInfo::ByteOrder == QSysInfo::BigEndian) || (ts == EXS_BigEndianImplicit && QSysInfo::ByteOrder == QSysInfo::LittleEndian); if (needSwap) { dcmData.resize(static_cast<int>(length * sizeof(quint16))); char* dest = dcmData.data(); for (unsigned long i = 0; i < length; ++i) { const quint16 value = pixelData[i]; dest[2*i] = static_cast<char>(value >> 8); // 高位 dest[2*i+1] = static_cast<char>(value & 0xFF); // 低位 } } else { dcmData = QByteArray(reinterpret_cast<const char*>(pixelData), static_cast<int>(length * sizeof(quint16))); } qDebug()<<"rows "<<rows<<"cols"<<cols; // 调用图像读取函数 #if 1 //dcm this->readImageFromMem(dcmData, cols, rows); #else QFile file(m_strRawPath); if (!file.open(QIODevice::ReadOnly)) { qWarning() << "无法打开文件"; emit radPixUpdated(m_radImage); } QByteArray rawData = file.readAll(); // 将整个文件读入字节数组[^2] file.close(); readImageFromMemNew(rawData ,cols,rows); #endif //this->readImageFromMemNew(dcmData, rows, cols); } return true; #endif return true; } 请帮我确认当前的代码执行读取指定的dcm文件时,获取的数据是否会产生异常
11-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值