Related: fdo#33455 retain color on scaling of 1 bit depth pngs
Change-Id: I445ce672742ddb6d6592ef419bf5e14c5f09a5b5
This commit is contained in:
@@ -859,9 +859,7 @@ bool Bitmap::Scale( const double& rScaleX, const double& rScaleY, sal_uInt32 nSc
|
|||||||
{
|
{
|
||||||
bool bRetval(false);
|
bool bRetval(false);
|
||||||
|
|
||||||
#ifdef DBG_UTIL
|
|
||||||
const sal_uInt16 nStartCount(GetBitCount());
|
const sal_uInt16 nStartCount(GetBitCount());
|
||||||
#endif
|
|
||||||
|
|
||||||
if(basegfx::fTools::equalZero(rScaleX) || basegfx::fTools::equalZero(rScaleY))
|
if(basegfx::fTools::equalZero(rScaleX) || basegfx::fTools::equalZero(rScaleY))
|
||||||
{
|
{
|
||||||
@@ -875,6 +873,22 @@ bool Bitmap::Scale( const double& rScaleX, const double& rScaleY, sal_uInt32 nSc
|
|||||||
bRetval = true;
|
bRetval = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//fdo#33455
|
||||||
|
//
|
||||||
|
//If we start with a 1 bit image, then after scaling it in any mode except
|
||||||
|
//BMP_SCALE_FAST we have a a 24bit image which is perfectly correct, but we
|
||||||
|
//are going to down-shift it to mono again and Bitmap::ImplMakeMono just
|
||||||
|
//has "Bitmap aNewBmp( GetSizePixel(), 1 );" to create a 1 bit bitmap which
|
||||||
|
//will default to black/white and the colors mapped to which ever is closer
|
||||||
|
//to black/white
|
||||||
|
//
|
||||||
|
//So the easiest thing to do to retain the colors of 1 bit bitmaps is to
|
||||||
|
//just use the fast scale rather than attempting to count unique colors in
|
||||||
|
//the other converters and pass all the info down through
|
||||||
|
//Bitmap::ImplMakeMono
|
||||||
|
if (nStartCount == 1 && nScaleFlag != BMP_SCALE_NONE)
|
||||||
|
nScaleFlag = BMP_SCALE_FAST;
|
||||||
|
|
||||||
switch(nScaleFlag)
|
switch(nScaleFlag)
|
||||||
{
|
{
|
||||||
case BMP_SCALE_NONE :
|
case BMP_SCALE_NONE :
|
||||||
@@ -936,13 +950,7 @@ bool Bitmap::Scale( const double& rScaleX, const double& rScaleY, sal_uInt32 nSc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DBG_UTIL
|
OSL_ENSURE(!bRetval || nStartCount == GetBitCount(), "Bitmap::Scale has changed the ColorDepth, this should *not* happen (!)");
|
||||||
if(bRetval && nStartCount != GetBitCount())
|
|
||||||
{
|
|
||||||
OSL_ENSURE(false, "Bitmap::Scale has changed the ColorDepth, this should *not* happen (!)");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return bRetval;
|
return bRetval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user