** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: ctndicom.cpp,v 1.8 2001/03/07 16:52:52 kevin Exp $
+** $Id: ctndicom.cpp,v 1.12 2001/03/13 14:53:44 kevin Exp $
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
DicomImporter::DicomImporter (const char* const pszFile)
- : m_strFilename(pszFile), m_bFail(false), m_iContents(DICOM_CONTENTS_INVALID),
+ : m_pFile(NULL), m_strFilename(pszFile), m_bFail(false), m_iContents(DICOM_CONTENTS_INVALID),
m_pImageFile(NULL), m_pProjections(NULL)
{
unsigned long lOptions = DCM_ORDERLITTLEENDIAN;
if (iMaskLength > 8)
iMaskLength -= 8;
unsigned int iMask = (1 << iMaskLength) - 1;
- for (int iy = iNRows - 1; iy >= 0; iy--) {
+ for (int iy = 0; iy < iNRows; iy++) {
for (int ix = 0; ix < iNCols; ix++) {
if (iBitsAllocated == 8) {
unsigned char cV = pRawPixels[iy * iNRows + ix];
unsigned char cV1 = pRawPixels[lBase];
unsigned char cV2 = pRawPixels[lBase+1] & iMask;
int iV = cV1 + (cV2 << 8);
- v[ix][iy] = iV * dRescaleSlope + dRescaleIntercept;
+ v[ix][iNRows - 1 - iy] = iV * dRescaleSlope + dRescaleIntercept;
}
}
}
dWidth = 1E-7;
double dScale = 65535. / dWidth;
- double dRescaleIntercept = -dMin;
+ double dRescaleIntercept = dMin;
double dRescaleSlope = 1 / dScale;
char szRescaleIntercept[17];
char szRescaleSlope[17];
char szIDImageType[] = "ORIGINAL";
char szIDManufacturerModel[65] = "";
+ std::ostringstream osPatComments;
+ m_pImageFile->printLabelsBrief (osPatComments);
+ size_t sizePatComments = osPatComments.str().length();
+ char* pszPatComments = new char [sizePatComments+1];
+ strncpy (pszPatComments, osPatComments.str().c_str(), sizePatComments);
+
snprintf (szIDSOPInstanceUID, sizeof(szIDSOPInstanceUID), "%s.2.1.6.1", szCTSimRoot);
snprintf (szRelStudyInstanceUID, sizeof(szRelStudyInstanceUID), "%s.2.1.6.1.1", szCTSimRoot);
snprintf (szRelFrameOfReferenceUID, sizeof(szRelFrameOfReferenceUID), "%s.99", szCTSimRoot);
{DCM_IDMODALITY, DCM_CS, "", 1, strlen(szModality), szModality},
{DCM_IDSOPCLASSUID, DCM_UI, "", 1, strlen(szSOPClassUID), szSOPClassUID},
{DCM_IDMANUFACTURERMODEL, DCM_LO, "", 1, strlen(szIDManufacturerModel), szIDManufacturerModel},
+ {DCM_PATCOMMENTS, DCM_LT, "", 1, strlen(pszPatComments), pszPatComments},
};
int nElemRequired = sizeof (aElemRequired) / sizeof(DCM_ELEMENT);
int iUpdateCount;
cond = DCM_ModifyElements (&m_pObject, aElemRequired, nElemRequired, NULL, 0, &iUpdateCount);
-
DCM_ELEMENT elemPixelData = {DCM_PXLPIXELDATA, DCM_OT, "", 1, 0, NULL};
unsigned long lRealLength = 2 * m_pImageFile->nx() * m_pImageFile->ny();
elemPixelData.d.ot = pRawPixels;
ImageFileArray v = m_pImageFile->getArray();
- for (int iy = iNRows - 1; iy >= 0; iy--) {
+ for (int iy = 0; iy < iNRows; iy++) {
for (int ix = 0; ix < iNCols; ix++) {
unsigned long lBase = (iy * iNRows + ix) * 2;
- unsigned int iValue = nearest<int>(dScale * (v[ix][iy] - dMin));
+ unsigned int iValue = nearest<int>(dScale * (v[ix][iNRows - 1 - iy] - dMin));
pRawPixels[lBase] = iValue & 0xFF;
pRawPixels[lBase+1] = (iValue & 0xFF00) >> 8;
}
cond = DCM_ModifyElements (&m_pObject, &elemPixelData, 1, NULL, 0, &iUpdateCount);
delete pRawPixels;
+ delete pszPatComments;
+
if (cond != DCM_NORMAL || iUpdateCount != 1) {
m_bFail = true;
m_strFailMessage = "Error modifying pixel data";