diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-01-12 13:27:21 +0000 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2015-01-12 16:53:05 +0000 |
commit | c2d8b640793f665b15b42cda4ad2dcb9d843216d (patch) | |
tree | dc8aac47a3e02b83d109675316ace5acbe42bb69 | |
parent | 4b6c9a6918238441f63222d4fc9e9db94bed6f0d (diff) |
Resolves: fdo#87015 image missing from doc
regression from
commit e0cce521f1ad0cc384d30ce2f1077ea229fffe62
Author: Armin Le Grand <alg@apache.org>
AuthorDate: Thu Jan 10 16:28:40 2013 +0000
Commit: Caolán McNamara <caolanm@redhat.com>
CommitDate: Thu Jun 13 14:50:46 2013 +0100
Resolves: #i121504# Support for alpha channel in clipboard for all systems
(cherry picked from commit ef3931ff410117e1237b3bef7bc090e8b83b9519)
which blindly just bulldozed out the bMSOFormat branch
Change-Id: Iec354f1fb585f0803b9df472bc9ec9e103aa5847
(cherry picked from commit 470fcca594ba4f6bf473d4d44b415c2ba151b0d9)
Reviewed-on: https://gerrit.libreoffice.org/13874
Reviewed-by: Andras Timar <andras.timar@collabora.com>
Tested-by: Andras Timar <andras.timar@collabora.com>
-rw-r--r-- | filter/source/msfilter/mstoolbar.cxx | 2 | ||||
-rw-r--r-- | include/vcl/dibtools.hxx | 3 | ||||
-rw-r--r-- | vcl/source/gdi/dibtools.cxx | 39 |
3 files changed, 35 insertions, 9 deletions
diff --git a/filter/source/msfilter/mstoolbar.cxx b/filter/source/msfilter/mstoolbar.cxx index 328b828318d8..2e13d3b66ced 100644 --- a/filter/source/msfilter/mstoolbar.cxx +++ b/filter/source/msfilter/mstoolbar.cxx @@ -724,7 +724,7 @@ bool TBCBitMap::Read( SvStream& rS) nOffSet = rS.Tell(); rS.ReadInt32( cbDIB ); // cbDIB = sizeOf(biHeader) + sizeOf(colors) + sizeOf(bitmapData) + 10 - return ReadDIB(mBitMap, rS, false); + return ReadDIB(mBitMap, rS, false, true); } #if OSL_DEBUG_LEVEL > 1 diff --git a/include/vcl/dibtools.hxx b/include/vcl/dibtools.hxx index 6091f6e1e768..a43764faa321 100644 --- a/include/vcl/dibtools.hxx +++ b/include/vcl/dibtools.hxx @@ -36,7 +36,8 @@ class Bitmap; bool VCL_DLLPUBLIC ReadDIB( // ReadDIB(rBitmap, rIStm, true); Bitmap& rTarget, SvStream& rIStm, - bool bFileHeader); + bool bFileHeader, + bool bMSOFormat=false); bool VCL_DLLPUBLIC ReadDIBBitmapEx( BitmapEx& rTarget, diff --git a/vcl/source/gdi/dibtools.cxx b/vcl/source/gdi/dibtools.cxx index af6a78ebb222..247ce7c9378a 100644 --- a/vcl/source/gdi/dibtools.cxx +++ b/vcl/source/gdi/dibtools.cxx @@ -166,7 +166,7 @@ namespace } } -bool ImplReadDIBInfoHeader(SvStream& rIStm, DIBV5Header& rHeader, bool& bTopDown) +bool ImplReadDIBInfoHeader(SvStream& rIStm, DIBV5Header& rHeader, bool& bTopDown, bool bMSOFormat) { // BITMAPINFOHEADER or BITMAPCOREHEADER or BITMAPV5HEADER const sal_Size aStartPos(rIStm.Tell()); @@ -182,6 +182,29 @@ bool ImplReadDIBInfoHeader(SvStream& rIStm, DIBV5Header& rHeader, bool& bTopDown rIStm.ReadUInt16( rHeader.nPlanes ); rIStm.ReadUInt16( rHeader.nBitCount ); } + else if ( bMSOFormat && rHeader.nSize == DIBINFOHEADERSIZE ) + { + sal_Int16 nTmp16(0); + rIStm.ReadInt16(nTmp16); + rHeader.nWidth = nTmp16; + rIStm.ReadInt16(nTmp16); + rHeader.nHeight = nTmp16; + sal_uInt8 nTmp8(0); + rIStm.ReadUChar(nTmp8); + rHeader.nPlanes = nTmp8; + rIStm.ReadUChar(nTmp8); + rHeader.nBitCount = nTmp8; + rIStm.ReadInt16(nTmp16); + rHeader.nSizeImage = nTmp16; + rIStm.ReadInt16(nTmp16); + rHeader.nCompression = nTmp16; + if ( !rHeader.nSizeImage ) // uncompressed? + rHeader.nSizeImage = ((rHeader.nWidth * rHeader.nBitCount + 31) & ~31) / 8 * rHeader.nHeight; + rIStm.ReadInt32( rHeader.nXPelsPerMeter ); + rIStm.ReadInt32( rHeader.nYPelsPerMeter ); + rIStm.ReadUInt32( rHeader.nColsUsed ); + rIStm.ReadUInt32( rHeader.nColsImportant ); + } else { // BITMAPCOREHEADER, BITMAPV5HEADER or unknown. Read as far as possible @@ -679,14 +702,14 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r return( rIStm.GetError() == 0UL ); } -bool ImplReadDIBBody( SvStream& rIStm, Bitmap& rBmp, Bitmap* pBmpAlpha, sal_uLong nOffset ) +bool ImplReadDIBBody( SvStream& rIStm, Bitmap& rBmp, Bitmap* pBmpAlpha, sal_uLong nOffset, bool bMSOFormat = false ) { DIBV5Header aHeader; const sal_uLong nStmPos = rIStm.Tell(); bool bRet(false); bool bTopDown(false); - if(ImplReadDIBInfoHeader(rIStm, aHeader, bTopDown) && aHeader.nWidth && aHeader.nHeight && aHeader.nBitCount) + if(ImplReadDIBInfoHeader(rIStm, aHeader, bTopDown, bMSOFormat) && aHeader.nWidth && aHeader.nHeight && aHeader.nBitCount) { // In case ImplReadDIB() didn't call ImplReadDIBFileHeader() before // this method, nOffset is 0, that's OK. @@ -1412,7 +1435,8 @@ bool ImplReadDIB( Bitmap& rTarget, Bitmap* pTargetAlpha, SvStream& rIStm, - bool bFileHeader) + bool bFileHeader, + bool bMSOFormat=false) { const sal_uInt16 nOldFormat(rIStm.GetNumberFormatInt()); const sal_uLong nOldPos(rIStm.Tell()); @@ -1430,7 +1454,7 @@ bool ImplReadDIB( } else { - bRet = ImplReadDIBBody(rIStm, rTarget, 0, nOffset); + bRet = ImplReadDIBBody(rIStm, rTarget, 0, nOffset, bMSOFormat); } if(!bRet) @@ -1518,9 +1542,10 @@ bool ImplWriteDIB( bool ReadDIB( Bitmap& rTarget, SvStream& rIStm, - bool bFileHeader) + bool bFileHeader, + bool bMSOFormat) { - return ImplReadDIB(rTarget, 0, rIStm, bFileHeader); + return ImplReadDIB(rTarget, 0, rIStm, bFileHeader, bMSOFormat); } bool ReadDIBBitmapEx( |