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 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题