如何生成一张2GB的DCM图像,使用DCMTK,putAndInsertUint8Array()时,提示virtual memory exhaust?

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;

}

https://blog.csdn.net/syz9011/article/details/49785559?locationNum=3