Windy_X 2018-11-06 02:19 采纳率: 0%
浏览 711

如何保存一张2GB的DCM图像,putAndInsertUint8Arrar();图像为2GB时,报错提示内存不足


void CProcessCommDlg::OnBnClickedButtonDcm()
{
    // TODO: 在此添加控件通知处理程序代码
    UpdateData(TRUE);
    DcmFileFormat fileformat;
    DcmDataset *pDataset = fileformat.getDataset();
    CString strRawPath, strDCMPath, strTmp;
    strRawPath.Format("D:\\TestImg\\%d.raw",g_imgNum);
    strDCMPath.Format("D:\\TestImg\\%d.dcm", g_imgNum);
    //OFCondition oc = fileformat.loadFile(strRawPath);
    int imgSize = m_nImgWidth*m_nImgWidth * 2;
    BYTE *pRaw = nullptr;
    try
    {
         pRaw= new BYTE[imgSize];
        memset(pRaw, 0, imgSize);
        //delete[]pRaw;
        FILE*fp = fopen(strRawPath,"r");
        if (fp == NULL)
        {
            delete[]pRaw;
            return;
        }
        fread(pRaw,sizeof(BYTE),imgSize,fp);
        fclose(fp);
        SetDlgItemText(IDC_STATIC_STATA, "文件写完");

    }
    catch (CMemoryException* e)
    {
        CString strErr;
        e->GetErrorMessage(strErr.GetBuffer(MAX_PATH), MAX_PATH, 0);
        AfxMessageBox(strErr);
        strErr.ReleaseBuffer();
        return;
    }

    //if (oc.good()) 
    {
        OFString strTagValue;
        AddDcmElements(pDataset);

        // 新名字
        if (fileformat.getDataset()->putAndInsertString(DCM_PatientName, "John Doe").good())
        {
            fileformat.getDataset()->findAndGetOFString(DCM_PatientName, strTagValue);
            cout << "Patient New Name:" << strTagValue.data() << endl;
        }
        // 修改窗宽窗位
        if (fileformat.getDataset()->putAndInsertString(DCM_WindowCenter, "30000").good())
        {
            fileformat.getDataset()->findAndGetOFString(DCM_WindowCenter, strTagValue);
            cout << "窗位:" << strTagValue.data() << endl;
        }
        if (fileformat.getDataset()->putAndInsertString(DCM_WindowWidth, "60000").good())
        {
            fileformat.getDataset()->findAndGetOFString(DCM_WindowCenter, strTagValue);
            cout << "窗宽:" << strTagValue.data() << endl;
        }
        // 修改宽高
        if (fileformat.getDataset()->putAndInsertString(DCM_Rows, "3072").good())
        {
            fileformat.getDataset()->findAndGetOFString(DCM_Rows, strTagValue);
            cout << "Rows:" << strTagValue.data() << endl;
        }
        if (fileformat.getDataset()->putAndInsertString(DCM_Columns, "3072").good())
        {
            fileformat.getDataset()->findAndGetOFString(DCM_Columns, strTagValue);
            cout << "Columns:" << strTagValue.data() << endl;
        }

        // 保存新的dcm
        OFCondition status = pDataset->putAndInsertUint8Array(DCM_PixelData, (Uint8 *)pRaw, imgSize, true);
        if (status.good())
        {
            strTmp.Format("%s", status.text());
            AfxMessageBox(strTmp);
            status = fileformat.saveFile(strDCMPath, EXS_LittleEndianExplicit);
            //status = fileformat.saveFile(strDCMPath, EXS_JPEGProcess14SV1TransferSyntax);
            if (status.bad())
            {
                strTmp.Format("DCM file create failed,%s", status.text());
                AfxMessageBox(strTmp);
            }
        }
        else
        {
            strTmp.Format("putAndInsertUint8Array error,%s", status.text());
            AfxMessageBox(strTmp);
        }
    }


    delete[]pRaw;

}
  • 写回答

2条回答 默认 最新

  • 多谱先生 2018-11-06 02:31
    关注

    这段代码是什么意思啊,有写看不懂

    评论

报告相同问题?

悬赏问题

  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?