X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=src%2FgdcmPixelReadConvert.cxx;h=66bcbfdeaad67b93616528281824a9b9730fbe7a;hb=92caef4ab9527cc610e45d51e6fde0d94a045088;hp=d3dfec5b671e7b81d405601c1fdff1fb8490829a;hpb=f12e51a575034ba832a0ff3b9f9c5ba219fc8562;p=gdcm.git diff --git a/src/gdcmPixelReadConvert.cxx b/src/gdcmPixelReadConvert.cxx index d3dfec5b..66bcbfde 100644 --- a/src/gdcmPixelReadConvert.cxx +++ b/src/gdcmPixelReadConvert.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmPixelReadConvert.cxx,v $ Language: C++ - Date: $Date: 2005/02/23 09:54:59 $ - Version: $Revision: 1.53 $ + Date: $Date: 2005/05/21 18:43:53 $ + Version: $Revision: 1.56 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -30,6 +30,8 @@ namespace gdcm { + +extern bool ReadMPEGFile (std::ifstream *fp, void *image_buffer); //----------------------------------------------------------------------------- #define str2num(str, typeNum) *((typeNum *)(str)) @@ -115,6 +117,7 @@ void PixelReadConvert::GrabInformationsFromFile( File *file ) || Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ExplicitVRBigEndian || Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::DeflatedExplicitVRLittleEndian; + IsMPEG = Global::GetTS()->IsMPEG(ts); IsJPEG2000 = Global::GetTS()->IsJPEG2000(ts); IsJPEGLS = Global::GetTS()->IsJPEGLS(ts); IsJPEGLossy = Global::GetTS()->IsJPEGLossy(ts); @@ -250,6 +253,13 @@ bool PixelReadConvert::ReadAndDecompressPixelData( std::ifstream *fp ) return false; } } + else if ( IsMPEG ) + { + //gdcmWarningMacro( "Sorry, MPEG not yet taken into account" ); + //return false; + ReadMPEGFile(fp, Raw); // fp has already been seek to start of mpeg + return true; + } else { // Default case concerns JPEG family @@ -796,10 +806,10 @@ void PixelReadConvert::ConvertYcBcRPlanesToRGBPixels() int l = XSize * YSize; int nbFrames = ZSize; - uint8_t *a = copyRaw; + uint8_t *a = copyRaw + 0; uint8_t *b = copyRaw + l; - uint8_t *c = copyRaw + l + l; - double R, G, B; + uint8_t *c = copyRaw + l+ l; + int32_t R, G, B; /// \todo : Replace by the 'well known' integer computation /// counterpart. Refer to @@ -810,16 +820,20 @@ void PixelReadConvert::ConvertYcBcRPlanesToRGBPixels() { for ( int j = 0; j < l; j++ ) { - R = 1.164 *(*a-16) + 1.596 *(*c -128) + 0.5; - G = 1.164 *(*a-16) - 0.813 *(*c -128) - 0.392 *(*b -128) + 0.5; - B = 1.164 *(*a-16) + 2.017 *(*b -128) + 0.5; - - if (R < 0.0) R = 0.0; - if (G < 0.0) G = 0.0; - if (B < 0.0) B = 0.0; - if (R > 255.0) R = 255.0; - if (G > 255.0) G = 255.0; - if (B > 255.0) B = 255.0; + R = 38142 *(*a-16) + 52298 *(*c -128); + G = 38142 *(*a-16) - 26640 *(*c -128) - 12845 *(*b -128); + B = 38142 *(*a-16) + 66093 *(*b -128); + + R = (R+16384)>>15; + G = (G+16384)>>15; + B = (B+16384)>>15; + + if (R < 0) R = 0; + if (G < 0) G = 0; + if (B < 0) B = 0; + if (R > 255) R = 255; + if (G > 255) G = 255; + if (B > 255) B = 255; *(localRaw++) = (uint8_t)R; *(localRaw++) = (uint8_t)G;