diff options
Diffstat (limited to 'goodies/source/filter.vcl/ipbm/ipbm.cxx')
-rw-r--r-- | goodies/source/filter.vcl/ipbm/ipbm.cxx | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/goodies/source/filter.vcl/ipbm/ipbm.cxx b/goodies/source/filter.vcl/ipbm/ipbm.cxx index 227490fc9d8e..3c30dd0c2ba3 100644 --- a/goodies/source/filter.vcl/ipbm/ipbm.cxx +++ b/goodies/source/filter.vcl/ipbm/ipbm.cxx @@ -106,7 +106,7 @@ BOOL PBMReader::ReadPBM( SvStream & rPBM, Graphic & rGraphic ) if ( ( mbStatus = ImplReadHeader() ) == FALSE ) return FALSE; - if ( mnWidth == 0 || mnHeight == 0 ) + if ( ( mnMaxVal == 0 ) || ( mnWidth == 0 ) || ( mnHeight == 0 ) ) return FALSE; // 0->PBM, 1->PGM, 2->PPM @@ -172,6 +172,7 @@ BOOL PBMReader::ImplReadHeader() *mpPBM >> nID[ 0 ] >> nID[ 1 ]; if ( nID[ 0 ] != 'P' ) return FALSE; + mnMaxVal = mnWidth = mnHeight = 0; switch ( nID[ 1 ] ) { case '1' : @@ -179,6 +180,7 @@ BOOL PBMReader::ImplReadHeader() case '4' : mnMode = 0; nMax = 2; // number of parameters in Header + mnMaxVal = 1; break; case '2' : mbRaw = FALSE; @@ -195,9 +197,6 @@ BOOL PBMReader::ImplReadHeader() default: return FALSE; } - - mnMaxVal = mnWidth = mnHeight = 0; - while ( bFinished == FALSE ) { if ( mpPBM->GetError() ) @@ -466,7 +465,9 @@ BOOL PBMReader::ImplReadBody() if ( nCount == 3 ) { nCount = 0; - mpAcc->SetPixel( nHeight, nWidth++, BitmapColor( (BYTE)nRGB[ 0 ], (BYTE)nRGB[ 1 ], (BYTE)nRGB[ 2 ] ) ); + mpAcc->SetPixel( nHeight, nWidth++, BitmapColor( static_cast< BYTE >( ( nRGB[ 0 ] * 255 ) / mnMaxVal ), + static_cast< BYTE >( ( nRGB[ 1 ] * 255 ) / mnMaxVal ), + static_cast< BYTE >( ( nRGB[ 2 ] * 255 ) / mnMaxVal ) ) ); nCount = 0; nRGB[ 0 ] = nRGB[ 1 ] = nRGB[ 2 ] = 0; if ( nWidth == mnWidth ) |