tdf#156540 invert alpha mask when drawing sprites
Due to the switch from transparency to alpha in commit81994cb2b8
, a sprite's alpha mask needs to be inverted. Additionally, fixes an oversight in vcl's alpha.cxx, where manual blend math got mangled, also in81994cb2b8
. Change-Id: I8ebbbc7fe624d8dfc8121d8814d30875c498870d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155378 Reviewed-by: Patrick Luby <plubius@neooffice.org> Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
parent
f454a77405
commit
ad1f69d28d
2 changed files with 6 additions and 4 deletions
|
@ -134,12 +134,14 @@ namespace vclcanvas
|
||||||
// sprite content might contain alpha, create
|
// sprite content might contain alpha, create
|
||||||
// BmpEx, then.
|
// BmpEx, then.
|
||||||
BitmapEx aMask( mpBackBufferMask->getOutDev().GetBitmapEx( aEmptyPoint,
|
BitmapEx aMask( mpBackBufferMask->getOutDev().GetBitmapEx( aEmptyPoint,
|
||||||
aOutputSize ) );
|
aOutputSize ) );
|
||||||
|
AlphaMask aAlpha( aMask.GetBitmap() );
|
||||||
|
aAlpha.Invert();
|
||||||
|
|
||||||
// Note: since we retrieved aBmp and aMask
|
// Note: since we retrieved aBmp and aMask
|
||||||
// directly from an OutDev, it's already a
|
// directly from an OutDev, it's already a
|
||||||
// 'display bitmap' on windows.
|
// 'display bitmap' on windows.
|
||||||
maContent = BitmapEx( aBmp.GetBitmap(), AlphaMask( aMask.GetBitmap()) );
|
maContent = BitmapEx( aBmp.GetBitmap(), aAlpha );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -118,8 +118,8 @@ void AlphaMask::BlendWith(const AlphaMask& rOther)
|
||||||
// Awkward calculation because the original used transparency, and to replicate
|
// Awkward calculation because the original used transparency, and to replicate
|
||||||
// the logic we need to translate into transparency, perform the original logic,
|
// the logic we need to translate into transparency, perform the original logic,
|
||||||
// then translate back to alpha.
|
// then translate back to alpha.
|
||||||
auto tmp = 255 - ((255 - nGrey1) + (255 - nGrey2) - (255 - nGrey1) * (255 - nGrey2));
|
auto tmp = 255 - ((255 - nGrey1) + (255 - nGrey2) - (255 - nGrey1) * (255 - nGrey2) / 255);
|
||||||
*scanline = static_cast<sal_uInt8>(tmp / 255);
|
*scanline = static_cast<sal_uInt8>(tmp);
|
||||||
++scanline;
|
++scanline;
|
||||||
++otherScanline;
|
++otherScanline;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue