Program: gdcm
Module: $RCSfile: gdcmRLEFrame.cxx,v $
Language: C++
- Date: $Date: 2005/02/05 01:37:09 $
- Version: $Revision: 1.7 $
+ Date: $Date: 2005/06/17 12:27:52 $
+ Version: $Revision: 1.8 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
long numberOfOutputBytes = 0;
long numberOfReadBytes = 0;
-
while( numberOfOutputBytes < rawSegmentSize )
{
fp->read( (char*)&count, 1 );
Program: gdcm
Module: $RCSfile: gdcmRLEFramesInfo.cxx,v $
Language: C++
- Date: $Date: 2005/02/11 17:01:46 $
- Version: $Revision: 1.15 $
+ Date: $Date: 2005/06/17 12:27:52 $
+ Version: $Revision: 1.16 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
#include "gdcmRLEFramesInfo.h"
#include "gdcmDebug.h"
+#include "gdcmUtil.h"
namespace gdcm
{
* \brief Reads from disk the Pixel Data of 'Run Length Encoded'
* Dicom encapsulated file and decompress it.
* @param fp already open File Pointer
- * at which the pixel data should be copied
+ * from which the pixel data should be read
* @param raw raw
* @param xSize x Size
* @param ySize y Size
int ySize, int numberOfFrames)
{
size_t pixelNumber = xSize * ySize;
- size_t rawSize = xSize * ySize * numberOfFrames;
+ size_t rawSize = pixelNumber * numberOfFrames * 2;
// We assumed Raw contains the decoded RLE pixels but as
// 8 bits per pixel. In order to convert those pixels to 16 bits
// per pixel we cannot work in place within Raw and hence
// we copy it in a safe place, say copyRaw.
- uint8_t *copyRaw = new uint8_t[rawSize * 2];
- memmove( copyRaw, raw, rawSize * 2 );
+ uint8_t *copyRaw = new uint8_t[rawSize];
+ memmove( copyRaw, raw, rawSize );
uint8_t *x = raw;
- uint8_t *a = copyRaw;
- uint8_t *b = a + pixelNumber;
+ uint8_t *a;
+ uint8_t *b;
+ // Warning : unckecked patch to see the behaviour on Big Endian Processors
+
+ if ( !Util::IsCurrentProcessorBigEndian() )
+ {
+ a = copyRaw; // begining of 'low bytes'
+ b = a + pixelNumber; // begining of 'hight bytes'
+ }
+ else
+ {
+ b = copyRaw; // begining of 'low bytes'
+ a = b + pixelNumber; // begining of 'hight bytes'
+ }
+
+ // Re order bytes
for ( int i = 0; i < numberOfFrames; i++ )
{
for ( unsigned int j = 0; j < pixelNumber; j++ )
*(x++) = *(a++);
}
}
+
+
delete[] copyRaw;
return true;