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;
}