-// gdcmRLE.cxx
-//-----------------------------------------------------------------------------
+/*=========================================================================
+
+ Program: gdcm
+ Module: $RCSfile: gdcmRLE.cxx,v $
+ Language: C++
+ Date: $Date: 2004/09/27 08:39:07 $
+ Version: $Revision: 1.23 $
+
+ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
+ l'Image). All rights reserved. See Doc/License.txt or
+ http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notices for more information.
+
+=========================================================================*/
+
#include <stdio.h>
#include "gdcmFile.h"
-#include <ctype.h> /* to declare isprint() */
+#include <ctype.h> // For isprint()
#define str2num(str, typeNum) *((typeNum *)(str))
* \brief Reads a 'Run Length Encoded' Dicom encapsulated file
* @param fp already open File Pointer
* @param image_buffer destination Address (in caller's memory space)
- * at which the pixel data should be copied
- *
+ * at which the pixel data should be copied
* @return Boolean
*/
-bool gdcmFile::gdcm_read_RLE_file (FILE *fp,void * image_buffer) {
+bool gdcmFile::gdcm_read_RLE_file (FILE* fp,void* image_buffer) {
long fragmentBegining; // for ftell, fseek
char * im = (char *)image_buffer;
long RleSegmentLength[15],fragmentLength,uncompressedSegmentSize;;
long ftellRes, ln;
- guint32 nbRleSegments;
- guint32 RleSegmentOffsetTable[15];
- guint16 ItemTagGr,ItemTagEl;
+ uint32_t nbRleSegments;
+ uint32_t RleSegmentOffsetTable[15];
+ uint16_t ItemTagGr,ItemTagEl;
uncompressedSegmentSize=Header->GetXSize()*Header->GetYSize();
ftellRes=ftell(fp);
// Basic Offset Table with Item Value
ln=Header->SwapLong(ln); // Basic Offset Table Item Lentgh
if (ln != 0) {
// What is it used for ??
- char * BasicOffsetTableItemValue= (char *)malloc(ln+1);
+ char * BasicOffsetTableItemValue= new char[ln+1];
fread(BasicOffsetTableItemValue,ln,1,fp);
- guint32 a;
+ uint32_t a;
for (int i=0;i<ln;i+=4){
- a=str2num(&BasicOffsetTableItemValue[i],guint32);
+ a=str2num(&BasicOffsetTableItemValue[i],uint32_t);
}
}
}
if (nbRleSegments>1) {
- for(int k=1; k<=nbRleSegments-1; k++) { // reading RLE Segments
+ for(unsigned int k=1; k<=nbRleSegments-1; k++) { // reading RLE Segments
RleSegmentLength[k]=RleSegmentOffsetTable[k+1]-RleSegmentOffsetTable[k];
ftellRes=ftell(fp);
fragmentBegining=ftell(fp);
int l = Header->GetXSize()*Header->GetYSize();
int nbFrames = Header->GetZSize();
- char * newDest = (char*) malloc(l*nbFrames*2);
+ char * newDest = new char[l*nbFrames*2];
char *x = newDest;
char * a = (char *)image_buffer;
char * b = a + l;
*(x++) = *(b++);
}
}
- memmove(image_buffer,newDest,lgrTotale);
- free(newDest);
+ memmove(image_buffer,newDest,ImageDataSize);
+ delete[] newDest;
}
- return(true);
+ return true;
}
// ----------------------------------------------------------------------------
// RLE LossLess Fragment
-int gdcmFile::gdcm_read_RLE_fragment(char **areaToRead, long lengthToDecode,
- long uncompressedSegmentSize, FILE *fp) {
+int gdcmFile::gdcm_read_RLE_fragment(char** areaToRead, long lengthToDecode,
+ long uncompressedSegmentSize, FILE* fp) {
+ (void)lengthToDecode; //FIXME
long ftellRes;
int count;
long numberOfOutputBytes=0;