summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2023-01-10 12:56:58 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2023-01-12 06:52:42 +0000
commit21734247d58a6e915b058d8fa55ece949d049613 (patch)
tree11f0eac0b0efecfae9065fb32313c82f85d75aef
parent7f0b6db955ee52f4216416566e108245f2b3a821 (diff)
drop internal support for 1-bit images
on modern hardware, these are less efficient than regular alpha channels. Also, this greatly simplies the range of stuff that vcl needs to deal with, which will make the upcoming transparency->alpha patch easier to deal with. Enhance vcl::CreateFromData to convert incoming 1-bit data to 8-bit image. Change-Id: I35829da750029fe373d0d2911a669d10bab6ad23 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145321 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--avmedia/source/gstreamer/gstframegrabber.cxx2
-rw-r--r--cppcanvas/source/mtfrenderer/implrenderer.cxx2
-rw-r--r--desktop/qa/desktop_lib/test_desktop_lib.cxx4
-rw-r--r--drawinglayer/source/tools/wmfemfhelper.cxx2
-rw-r--r--emfio/source/reader/wmfreader.cxx6
-rw-r--r--filter/source/msfilter/msdffimp.cxx2
-rw-r--r--forms/source/component/imgprod.cxx2
-rw-r--r--include/vcl/BitmapTools.hxx2
-rw-r--r--include/vcl/bitmap/BitmapTypes.hxx4
-rw-r--r--lotuswordpro/source/filter/lwpbackgroundstuff.cxx2
-rw-r--r--svx/source/gallery2/galobj.cxx2
-rw-r--r--svx/source/sdr/primitive2d/sdrprimitivetools.cxx2
-rw-r--r--vcl/headless/BitmapHelper.cxx57
-rw-r--r--vcl/headless/CairoCommon.cxx3
-rw-r--r--vcl/headless/svpbmp.cxx3
-rw-r--r--vcl/inc/qt5/QtTools.hxx2
-rw-r--r--vcl/qa/cppunit/BitmapTest.cxx13
-rw-r--r--vcl/qa/cppunit/BmpFilterTest.cxx2
-rw-r--r--vcl/qa/cppunit/XpmFilterTest.cxx2
-rw-r--r--vcl/qa/cppunit/canvasbitmaptest.cxx1
-rw-r--r--vcl/qa/cppunit/png/PngFilterTest.cxx65
-rw-r--r--vcl/qa/cppunit/svm/svmtest.cxx23
-rw-r--r--vcl/qt5/QtBitmap.cxx2
-rw-r--r--vcl/source/bitmap/BitmapEx.cxx10
-rw-r--r--vcl/source/bitmap/BitmapMonochromeFilter.cxx2
-rw-r--r--vcl/source/bitmap/BitmapSimpleColorQuantizationFilter.cxx6
-rw-r--r--vcl/source/bitmap/BitmapTools.cxx105
-rw-r--r--vcl/source/bitmap/bitmap.cxx32
-rw-r--r--vcl/source/bitmap/bitmappaint.cxx10
-rw-r--r--vcl/source/bitmap/dibtools.cxx94
-rw-r--r--vcl/source/filter/igif/gifread.cxx2
-rw-r--r--vcl/source/filter/ixbm/xbmread.cxx4
-rw-r--r--vcl/source/filter/ixpm/xpmread.cxx6
-rw-r--r--vcl/source/filter/jpeg/JpegReader.cxx2
-rw-r--r--vcl/source/gdi/mtfxmldump.cxx1
-rw-r--r--vcl/source/gdi/pdfwriter_impl.cxx34
-rw-r--r--vcl/source/gdi/pdfwriter_impl2.cxx6
-rw-r--r--vcl/source/gdi/print.cxx6
-rw-r--r--vcl/source/helper/canvastools.cxx5
-rw-r--r--vcl/source/rendercontext/drawmode.cxx3
-rw-r--r--vcl/unx/generic/gdi/salbmp.cxx3
41 files changed, 157 insertions, 379 deletions
diff --git a/avmedia/source/gstreamer/gstframegrabber.cxx b/avmedia/source/gstreamer/gstframegrabber.cxx
index ece799d87530..6f41511dc128 100644
--- a/avmedia/source/gstreamer/gstframegrabber.cxx
+++ b/avmedia/source/gstreamer/gstframegrabber.cxx
@@ -146,7 +146,7 @@ uno::Reference< graphic::XGraphic > SAL_CALL FrameGrabber::grabFrame( double fMe
pData = aMapInfo.data;
int nStride = GST_ROUND_UP_4( nWidth * 3 );
- BitmapEx aBmp = vcl::bitmap::CreateFromData(pData, nWidth, nHeight, nStride, vcl::PixelFormat::N24_BPP);
+ BitmapEx aBmp = vcl::bitmap::CreateFromData(pData, nWidth, nHeight, nStride, /*nBitsPerPixel*/24);
gst_buffer_unmap( pBuf, &aMapInfo );
xRet = Graphic( aBmp ).GetXGraphic();
diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx
index 130d19af95f7..1fef9c48cce7 100644
--- a/cppcanvas/source/mtfrenderer/implrenderer.cxx
+++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx
@@ -210,7 +210,7 @@ namespace
Bitmap aMask( rBitmap.CreateMask( aWhite ));
Bitmap aSolid( rBitmap.GetSizePixel(),
- vcl::PixelFormat::N1_BPP,
+ vcl::PixelFormat::N8_BPP,
&aBiLevelPalette );
aSolid.Erase( rMaskColor );
diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx
index 5d897c40f1da..181366e6a19e 100644
--- a/desktop/qa/desktop_lib/test_desktop_lib.cxx
+++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx
@@ -3357,7 +3357,7 @@ void DesktopLOKTest::testRenderSearchResult_WriterNode()
CPPUNIT_ASSERT_EQUAL(size_t(1440648), nByteSize);
const sal_uInt8* pD = reinterpret_cast<const sal_uInt8*>(pBuffer);
- BitmapEx aBitmap = vcl::bitmap::CreateFromData(pD, nWidth, nHeight, nWidth * 4, vcl::PixelFormat::N32_BPP, true, true);
+ BitmapEx aBitmap = vcl::bitmap::CreateFromData(pD, nWidth, nHeight, nWidth * 4, /*nBitsPerPixel*/32, true, true);
if (bDumpBitmap)
{
@@ -3402,7 +3402,7 @@ void DesktopLOKTest::testRenderSearchResult_CommonNode()
CPPUNIT_ASSERT_EQUAL(size_t(73728), nByteSize);
const sal_uInt8* pD = reinterpret_cast<const sal_uInt8*>(pBuffer);
- BitmapEx aBitmap = vcl::bitmap::CreateFromData(pD, nWidth, nHeight, nWidth * 4, vcl::PixelFormat::N32_BPP, true, true);
+ BitmapEx aBitmap = vcl::bitmap::CreateFromData(pD, nWidth, nHeight, nWidth * 4, /*nBitsPerPixel*/32, true, true);
if (bDumpBitmap)
{
diff --git a/drawinglayer/source/tools/wmfemfhelper.cxx b/drawinglayer/source/tools/wmfemfhelper.cxx
index 4790465a7366..3a06f6423665 100644
--- a/drawinglayer/source/tools/wmfemfhelper.cxx
+++ b/drawinglayer/source/tools/wmfemfhelper.cxx
@@ -642,7 +642,7 @@ namespace wmfemfhelper
};
Bitmap aMask(rBitmap.CreateMask(aWhite));
- Bitmap aSolid(rBitmap.GetSizePixel(), vcl::PixelFormat::N1_BPP, &aBiLevelPalette);
+ Bitmap aSolid(rBitmap.GetSizePixel(), vcl::PixelFormat::N8_BPP, &aBiLevelPalette);
aSolid.Erase(rMaskColor);
diff --git a/emfio/source/reader/wmfreader.cxx b/emfio/source/reader/wmfreader.cxx
index 8825fa5fdea1..cfb15cd31eac 100644
--- a/emfio/source/reader/wmfreader.cxx
+++ b/emfio/source/reader/wmfreader.cxx
@@ -837,8 +837,8 @@ namespace emfio
SAL_WARN("emfio", "\t\t TODO The unsupported Bitmap record. Please fill a bug.");
break;
}
- const vcl::PixelFormat ePixelFormat = vcl::bitDepthToPixelFormat( nBitCount );
- bool bOk = nWidth > 0 && nHeight > 0 && nBytesPerScan > 0 && ePixelFormat != vcl::PixelFormat::INVALID;
+ bool bOk = nWidth > 0 && nHeight > 0 && nBytesPerScan > 0
+ && (nBitCount == 1 || nBitCount == 8 || nBitCount == 24 || nBitCount == 32);
if (bOk)
{
// must be enough data to fulfil the request
@@ -854,7 +854,7 @@ namespace emfio
std::unique_ptr< sal_uInt8[] > pData;
pData.reset( new sal_uInt8[ nHeight * nBytesPerScan ] );
mpInputStream->ReadBytes( pData.get(), nHeight * nBytesPerScan );
- BitmapEx aBitmap = vcl::bitmap::CreateFromData( pData.get(), nWidth, nHeight, nBytesPerScan, ePixelFormat, true );
+ BitmapEx aBitmap = vcl::bitmap::CreateFromData( pData.get(), nWidth, nHeight, nBytesPerScan, nBitCount, true );
if ( nSye && nSxe &&
( nXSrc + nSxe <= nWidth ) &&
( nYSrc + nSye <= nHeight ) )
diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx
index cdcad2778f6f..552deee7df5f 100644
--- a/filter/source/msfilter/msdffimp.cxx
+++ b/filter/source/msfilter/msdffimp.cxx
@@ -1412,7 +1412,7 @@ void DffPropertyReader::ApplyFillAttributes( SvStream& rIn, SfxItemSet& rSet, co
Bitmap aBmp( aGraf.GetBitmapEx().GetBitmap() );
if (aBmp.GetSizePixel().Width() == 8 &&
aBmp.GetSizePixel().Height() == 8 &&
- aBmp.getPixelFormat() == vcl::PixelFormat::N1_BPP)
+ aBmp.getPixelFormat() == vcl::PixelFormat::N8_BPP)
{
Color aCol1( COL_WHITE ), aCol2( COL_WHITE );
diff --git a/forms/source/component/imgprod.cxx b/forms/source/component/imgprod.cxx
index ccdd28e0df95..a496f5bb4aa5 100644
--- a/forms/source/component/imgprod.cxx
+++ b/forms/source/component/imgprod.cxx
@@ -377,7 +377,7 @@ void ImageProducer::ImplUpdateConsumer( const Graphic& rGraphic )
if( !pMskAcc )
{
- aMask = Bitmap(aBmp.GetSizePixel(), vcl::PixelFormat::N1_BPP);
+ aMask = Bitmap(aBmp.GetSizePixel(), vcl::PixelFormat::N8_BPP, &Bitmap::GetGreyPalette(256));
aMask.Erase( COL_BLACK );
pMskAcc = aMask.AcquireReadAccess();
}
diff --git a/include/vcl/BitmapTools.hxx b/include/vcl/BitmapTools.hxx
index d43e9dc7a692..f06f736e452c 100644
--- a/include/vcl/BitmapTools.hxx
+++ b/include/vcl/BitmapTools.hxx
@@ -52,7 +52,7 @@ void loadFromSvg(SvStream& rStream, const OUString& sPath, BitmapEx& rBitmapEx,
*/
BitmapEx VCL_DLLPUBLIC CreateFromData(sal_uInt8 const *pData,
sal_Int32 nWidth, sal_Int32 nHeight, sal_Int32 nStride,
- vcl::PixelFormat ePixelFormat,
+ sal_Int8 nBitsPerPixel,
bool bReversColors = false, bool bReverseAlpha = false);
BitmapEx VCL_DLLPUBLIC CreateFromData( RawBitmap && data );
diff --git a/include/vcl/bitmap/BitmapTypes.hxx b/include/vcl/bitmap/BitmapTypes.hxx
index 10d0f5332c7b..6f1cc220a977 100644
--- a/include/vcl/bitmap/BitmapTypes.hxx
+++ b/include/vcl/bitmap/BitmapTypes.hxx
@@ -19,7 +19,6 @@ namespace vcl
enum class PixelFormat
{
INVALID = 0,
- N1_BPP = 1,
N8_BPP = 8,
N24_BPP = 24,
N32_BPP = 32
@@ -47,9 +46,8 @@ constexpr PixelFormat bitDepthToPixelFormat(sal_uInt16 nBitDepth)
switch (nBitDepth)
{
case 1:
- return PixelFormat::N1_BPP;
case 4:
- assert(false);
+ assert(false && "no longer supported");
break;
case 8:
return PixelFormat::N8_BPP;
diff --git a/lotuswordpro/source/filter/lwpbackgroundstuff.cxx b/lotuswordpro/source/filter/lwpbackgroundstuff.cxx
index 72cb9822cddb..2c2fcf109504 100644
--- a/lotuswordpro/source/filter/lwpbackgroundstuff.cxx
+++ b/lotuswordpro/source/filter/lwpbackgroundstuff.cxx
@@ -114,7 +114,7 @@ std::unique_ptr<XFBGImage> LwpBackgroundStuff::GetFillPattern()
GetPattern(m_nID, aPttnArray);
// create bitmap object from the pattern array
- BitmapEx aBmp = vcl::bitmap::CreateFromData(aPttnArray, 8, 8, 1, vcl::PixelFormat::N1_BPP);
+ BitmapEx aBmp = vcl::bitmap::CreateFromData(aPttnArray, 8, 8, 1, /*nBitsPerPixel*/ 8);
// create XOBitmap object from bitmap object
XOBitmap aXOBitmap(aBmp);
diff --git a/svx/source/gallery2/galobj.cxx b/svx/source/gallery2/galobj.cxx
index 44362b9a78ec..f083ad85bb78 100644
--- a/svx/source/gallery2/galobj.cxx
+++ b/svx/source/gallery2/galobj.cxx
@@ -313,7 +313,7 @@ SgaObjectSound::SgaObjectSound( const INetURLObject& rURL ) :
if( FileExists( rURL ) )
{
aURL = rURL;
- aThumbBmp = Bitmap(Size(1, 1), vcl::PixelFormat::N1_BPP);
+ aThumbBmp = Bitmap(Size(1, 1), vcl::PixelFormat::N8_BPP);
bIsValid = true;
}
else
diff --git a/svx/source/sdr/primitive2d/sdrprimitivetools.cxx b/svx/source/sdr/primitive2d/sdrprimitivetools.cxx
index 6376fa796086..ff733c0b6e53 100644
--- a/svx/source/sdr/primitive2d/sdrprimitivetools.cxx
+++ b/svx/source/sdr/primitive2d/sdrprimitivetools.cxx
@@ -51,7 +51,7 @@ namespace drawinglayer::primitive2d
r, g, b, 0, r, g, b, 0, r, g, b, 0,
0, 0, 0, a, r, g, b, 0, 0, 0, 0, a
};
- BitmapEx aBitmap = vcl::bitmap::CreateFromData(cross, 3, 3, 12, vcl::PixelFormat::N32_BPP);
+ BitmapEx aBitmap = vcl::bitmap::CreateFromData(cross, 3, 3, 12, /*nBitsPerPixel*/32);
// create and exchange at aRetVal
aRetVal.set(aBitmap);
diff --git a/vcl/headless/BitmapHelper.cxx b/vcl/headless/BitmapHelper.cxx
index 35bcad3fe304..3eb29aa76ad3 100644
--- a/vcl/headless/BitmapHelper.cxx
+++ b/vcl/headless/BitmapHelper.cxx
@@ -82,46 +82,23 @@ MaskHelper::MaskHelper(const SalBitmap& rAlphaBitmap)
{
const SvpSalBitmap& rMask = static_cast<const SvpSalBitmap&>(rAlphaBitmap);
const BitmapBuffer* pMaskBuf = rMask.GetBuffer();
-
- if (rAlphaBitmap.GetBitCount() == 8)
- {
- // the alpha values need to be inverted for Cairo
- // so big stupid copy and invert here
- const int nImageSize = pMaskBuf->mnHeight * pMaskBuf->mnScanlineSize;
- pAlphaBits.reset(new unsigned char[nImageSize]);
- memcpy(pAlphaBits.get(), pMaskBuf->mpBits, nImageSize);
-
- // TODO: make upper layers use standard alpha
- sal_uInt32* pLDst = reinterpret_cast<sal_uInt32*>(pAlphaBits.get());
- for (int i = nImageSize / sizeof(sal_uInt32); --i >= 0; ++pLDst)
- *pLDst = ~*pLDst;
- assert(reinterpret_cast<unsigned char*>(pLDst) == pAlphaBits.get() + nImageSize);
-
- implSetSurface(cairo_image_surface_create_for_data(pAlphaBits.get(), CAIRO_FORMAT_A8,
- pMaskBuf->mnWidth, pMaskBuf->mnHeight,
- pMaskBuf->mnScanlineSize));
- }
- else
- {
- // the alpha values need to be inverted for Cairo
- // so big stupid copy and invert here
- const int nImageSize = pMaskBuf->mnHeight * pMaskBuf->mnScanlineSize;
- pAlphaBits.reset(new unsigned char[nImageSize]);
- memcpy(pAlphaBits.get(), pMaskBuf->mpBits, nImageSize);
-
- const sal_Int32 nBlackIndex = pMaskBuf->maPalette.GetBestIndex(BitmapColor(COL_BLACK));
- if (nBlackIndex == 0)
- {
- // TODO: make upper layers use standard alpha
- unsigned char* pDst = pAlphaBits.get();
- for (int i = nImageSize; --i >= 0; ++pDst)
- *pDst = ~*pDst;
- }
-
- implSetSurface(cairo_image_surface_create_for_data(pAlphaBits.get(), CAIRO_FORMAT_A1,
- pMaskBuf->mnWidth, pMaskBuf->mnHeight,
- pMaskBuf->mnScanlineSize));
- }
+ assert(rAlphaBitmap.GetBitCount() == 8 && "we only support 8-bit masks now");
+
+ // the alpha values need to be inverted for Cairo
+ // so big stupid copy and invert here
+ const int nImageSize = pMaskBuf->mnHeight * pMaskBuf->mnScanlineSize;
+ pAlphaBits.reset(new unsigned char[nImageSize]);
+ memcpy(pAlphaBits.get(), pMaskBuf->mpBits, nImageSize);
+
+ // TODO: make upper layers use standard alpha
+ sal_uInt32* pLDst = reinterpret_cast<sal_uInt32*>(pAlphaBits.get());
+ for (int i = nImageSize / sizeof(sal_uInt32); --i >= 0; ++pLDst)
+ *pLDst = ~*pLDst;
+ assert(reinterpret_cast<unsigned char*>(pLDst) == pAlphaBits.get() + nImageSize);
+
+ implSetSurface(cairo_image_surface_create_for_data(pAlphaBits.get(), CAIRO_FORMAT_A8,
+ pMaskBuf->mnWidth, pMaskBuf->mnHeight,
+ pMaskBuf->mnScanlineSize));
}
namespace
diff --git a/vcl/headless/CairoCommon.cxx b/vcl/headless/CairoCommon.cxx
index 0aaefff4ef52..90f10bfdaa25 100644
--- a/vcl/headless/CairoCommon.cxx
+++ b/vcl/headless/CairoCommon.cxx
@@ -1771,9 +1771,10 @@ std::shared_ptr<SalBitmap> CairoCommon::getBitmap(tools::Long nX, tools::Long nY
std::shared_ptr<SvpSalBitmap> pBitmap = std::make_shared<SvpSalBitmap>();
BitmapPalette aPal;
vcl::PixelFormat ePixelFormat = vcl::PixelFormat::INVALID;
+ assert(GetBitCount() != 1 && "not supported anymore");
if (GetBitCount() == 1)
{
- ePixelFormat = vcl::PixelFormat::N1_BPP;
+ ePixelFormat = vcl::PixelFormat::N8_BPP;
aPal.SetEntryCount(2);
aPal[0] = COL_BLACK;
aPal[1] = COL_WHITE;
diff --git a/vcl/headless/svpbmp.cxx b/vcl/headless/svpbmp.cxx
index a72774068d30..9c12fb91d2c1 100644
--- a/vcl/headless/svpbmp.cxx
+++ b/vcl/headless/svpbmp.cxx
@@ -64,9 +64,6 @@ static std::unique_ptr<BitmapBuffer> ImplCreateDIB(
switch (ePixelFormat)
{
- case vcl::PixelFormat::N1_BPP:
- pDIB->mnFormat = ScanlineFormat::N1BitLsbPal;
- break;
case vcl::PixelFormat::N8_BPP:
pDIB->mnFormat = ScanlineFormat::N8BitPal;
break;
diff --git a/vcl/inc/qt5/QtTools.hxx b/vcl/inc/qt5/QtTools.hxx
index 669b5bef6df0..694a0756d9f7 100644
--- a/vcl/inc/qt5/QtTools.hxx
+++ b/vcl/inc/qt5/QtTools.hxx
@@ -111,8 +111,6 @@ inline QImage::Format getBitFormat(vcl::PixelFormat ePixelFormat)
{
switch (ePixelFormat)
{
- case vcl::PixelFormat::N1_BPP:
- return QImage::Format_Mono;
case vcl::PixelFormat::N8_BPP:
return QImage::Format_Indexed8;
case vcl::PixelFormat::N24_BPP:
diff --git a/vcl/qa/cppunit/BitmapTest.cxx b/vcl/qa/cppunit/BitmapTest.cxx
index 79f779f2a809..98fabd569f24 100644
--- a/vcl/qa/cppunit/BitmapTest.cxx
+++ b/vcl/qa/cppunit/BitmapTest.cxx
@@ -94,19 +94,6 @@ void BitmapTest::testCreation()
}
{
- Bitmap aBmp(Size(10, 10), vcl::PixelFormat::N1_BPP);
- Size aSize = aBmp.GetSizePixel();
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong width", static_cast<tools::Long>(10), aSize.Width());
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong height", static_cast<tools::Long>(10), aSize.Height());
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong pref size", Size(), aBmp.GetPrefSize());
- CPPUNIT_ASSERT_MESSAGE("Empty bitmap", !aBmp.IsEmpty());
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong pixel format", vcl::PixelFormat::N1_BPP,
- aBmp.getPixelFormat());
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong byte size", static_cast<sal_Int64>(12),
- aBmp.GetSizeBytes());
- }
-
- {
Bitmap aBmp(Size(10, 10), vcl::PixelFormat::N8_BPP);
Size aSize = aBmp.GetSizePixel();
CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong width", static_cast<tools::Long>(10), aSize.Width());
diff --git a/vcl/qa/cppunit/BmpFilterTest.cxx b/vcl/qa/cppunit/BmpFilterTest.cxx
index 1ab7bc2a0a4a..7a4987116a67 100644
--- a/vcl/qa/cppunit/BmpFilterTest.cxx
+++ b/vcl/qa/cppunit/BmpFilterTest.cxx
@@ -100,7 +100,7 @@ CPPUNIT_TEST_FIXTURE(BmpFilterTest, testBMP_Index_1BPP)
auto aBitmap = aGraphic.GetBitmapEx();
CPPUNIT_ASSERT_EQUAL(tools::Long(4), aBitmap.GetSizePixel().Width());
CPPUNIT_ASSERT_EQUAL(tools::Long(4), aBitmap.GetSizePixel().Height());
- CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N1_BPP, aBitmap.getPixelFormat());
+ CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N8_BPP, aBitmap.getPixelFormat());
CPPUNIT_ASSERT_EQUAL(COL_BLACK, aBitmap.GetPixelColor(0, 0));
CPPUNIT_ASSERT_EQUAL(COL_BLACK, aBitmap.GetPixelColor(0, 2));
diff --git a/vcl/qa/cppunit/XpmFilterTest.cxx b/vcl/qa/cppunit/XpmFilterTest.cxx
index 1c24de1e131e..e9358d755f90 100644
--- a/vcl/qa/cppunit/XpmFilterTest.cxx
+++ b/vcl/qa/cppunit/XpmFilterTest.cxx
@@ -66,7 +66,7 @@ CPPUNIT_TEST_FIXTURE(XpmFilterTest, testXPM_1bit)
auto aBitmap = aGraphic.GetBitmapEx();
CPPUNIT_ASSERT_EQUAL(tools::Long(10), aBitmap.GetSizePixel().Width());
CPPUNIT_ASSERT_EQUAL(tools::Long(10), aBitmap.GetSizePixel().Height());
- CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N1_BPP, aBitmap.getPixelFormat());
+ CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N8_BPP, aBitmap.getPixelFormat());
CPPUNIT_ASSERT_EQUAL(Color(0xffffff), aBitmap.GetPixelColor(0, 0));
CPPUNIT_ASSERT_EQUAL(Color(0x72d1c8), aBitmap.GetPixelColor(1, 1));
CPPUNIT_ASSERT_EQUAL(Color(0x72d1c8), aBitmap.GetPixelColor(8, 8));
diff --git a/vcl/qa/cppunit/canvasbitmaptest.cxx b/vcl/qa/cppunit/canvasbitmaptest.cxx
index d16401b46464..32481620d2dc 100644
--- a/vcl/qa/cppunit/canvasbitmaptest.cxx
+++ b/vcl/qa/cppunit/canvasbitmaptest.cxx
@@ -640,7 +640,6 @@ void CanvasBitmapTest::runTest()
{
static vcl::PixelFormat ePixelFormatArray[] =
{
- vcl::PixelFormat::N1_BPP,
vcl::PixelFormat::N8_BPP,
vcl::PixelFormat::N24_BPP
};
diff --git a/vcl/qa/cppunit/png/PngFilterTest.cxx b/vcl/qa/cppunit/png/PngFilterTest.cxx
index 81bafac1d184..fd5747d8e9c8 100644
--- a/vcl/qa/cppunit/png/PngFilterTest.cxx
+++ b/vcl/qa/cppunit/png/PngFilterTest.cxx
@@ -175,7 +175,6 @@ public:
void testPngRoundtrip24();
void testPngRoundtrip24_8();
void testPngRoundtrip32();
- void testPngWrite1BitRGBPalette();
void testPngWrite8BitRGBPalette();
CPPUNIT_TEST_SUITE(PngFilterTest);
@@ -186,7 +185,6 @@ public:
CPPUNIT_TEST(testPngRoundtrip24);
CPPUNIT_TEST(testPngRoundtrip24_8);
CPPUNIT_TEST(testPngRoundtrip32);
- CPPUNIT_TEST(testPngWrite1BitRGBPalette);
CPPUNIT_TEST(testPngWrite8BitRGBPalette);
CPPUNIT_TEST_SUITE_END();
};
@@ -1912,69 +1910,6 @@ void PngFilterTest::testPngRoundtrip24_8()
void PngFilterTest::testPngRoundtrip32() {}
-void PngFilterTest::testPngWrite1BitRGBPalette()
-{
- SvMemoryStream aExportStream;
- {
- BitmapPalette aPal;
- aPal.SetEntryCount(2);
- aPal[0] = COL_RED;
- aPal[1] = COL_GREEN;
- Bitmap aBitmap(Size(16, 16), vcl::PixelFormat::N1_BPP, &aPal);
- {
- BitmapScopedWriteAccess pWriteAccessBitmap(aBitmap);
- // Top left
- for (int i = 0; i < 8; i++)
- {
- for (int j = 0; j < 8; j++)
- {
- pWriteAccessBitmap->SetPixelIndex(i, j, 0);
- }
- }
- // Top right
- for (int i = 0; i < 8; i++)
- {
- for (int j = 8; j < 16; j++)
- {
- pWriteAccessBitmap->SetPixelIndex(i, j, 1);
- }
- }
- // Bottom left
- for (int i = 8; i < 16; i++)
- {
- for (int j = 0; j < 8; j++)
- {
- pWriteAccessBitmap->SetPixelIndex(i, j, 1);
- }
- }
- // Bottom right
- for (int i = 8; i < 16; i++)
- {
- for (int j = 8; j < 16; j++)
- {
- pWriteAccessBitmap->SetPixelIndex(i, j, 0);
- }
- }
- }
- BitmapEx aBitmapEx(aBitmap);
- vcl::PngImageWriter aPngWriter(aExportStream);
- CPPUNIT_ASSERT_EQUAL(true, aPngWriter.write(aBitmapEx));
- }
- aExportStream.Seek(0);
- {
- vcl::PngImageReader aPngReader(aExportStream);
- BitmapEx aBitmapEx;
- CPPUNIT_ASSERT_EQUAL(true, aPngReader.read(aBitmapEx));
-
- CPPUNIT_ASSERT_EQUAL(Size(16, 16), aBitmapEx.GetSizePixel());
-
- CPPUNIT_ASSERT_EQUAL(COL_RED, aBitmapEx.GetPixelColor(0, 0));
- CPPUNIT_ASSERT_EQUAL(COL_RED, aBitmapEx.GetPixelColor(15, 15));
- CPPUNIT_ASSERT_EQUAL(COL_GREEN, aBitmapEx.GetPixelColor(15, 0));
- CPPUNIT_ASSERT_EQUAL(COL_GREEN, aBitmapEx.GetPixelColor(0, 15));
- }
-}
-
void PngFilterTest::testPngWrite8BitRGBPalette()
{
SvMemoryStream aExportStream;
diff --git a/vcl/qa/cppunit/svm/svmtest.cxx b/vcl/qa/cppunit/svm/svmtest.cxx
index 3c92ea3d7d7f..02cec9bcfd45 100644
--- a/vcl/qa/cppunit/svm/svmtest.cxx
+++ b/vcl/qa/cppunit/svm/svmtest.cxx
@@ -116,7 +116,7 @@ class SvmTest : public test::BootstrapFixture, public XmlTestTools
void checkBitmaps(const GDIMetaFile& rMetaFile);
void testBitmaps();
- void checkBitmapExs(const GDIMetaFile& rMetaFile);
+ void checkBitmapExs(const GDIMetaFile& rMetaFile, bool bIsSvmFile);
void testBitmapExs();
void checkMasks(const GDIMetaFile& rMetaFile);
@@ -998,7 +998,7 @@ void SvmTest::testBitmaps()
}
}
-void SvmTest::checkBitmapExs(const GDIMetaFile& rMetaFile)
+void SvmTest::checkBitmapExs(const GDIMetaFile& rMetaFile, bool bIsSvmFile)
{
xmlDocUniquePtr pDoc = dumpMeta(rMetaFile);
@@ -1013,7 +1013,7 @@ void SvmTest::checkBitmapExs(const GDIMetaFile& rMetaFile)
"281fc589",
"b8dee5da",
"4df0e464",
- "186ff868",
+ "186ff868", // 1-bit
"33b4a07c", // 4-bit color bitmap - same as 8-bit color bitmap
"33b4a07c",
"742c3e35",
@@ -1022,7 +1022,7 @@ void SvmTest::checkBitmapExs(const GDIMetaFile& rMetaFile)
"281fc589",
"5e01ddcc",
"4df0e464",
- "4322ee3a",
+ "17df308f", // 1-bit
"3c80d829", // 4-bit color bitmap - same as 8-bit color bitmap
"3c80d829",
"71efc447",
@@ -1046,9 +1046,12 @@ void SvmTest::checkBitmapExs(const GDIMetaFile& rMetaFile)
assertXPathAttrs(pDoc, "/metafile/bmpex[2]", {
{"x", "6"}, {"y", "6"}, {"crc", aExpectedCRC[3]}, {"transparenttype", "bitmap"}
});
- assertXPathAttrs(pDoc, "/metafile/bmpex[3]", {
- {"x", "0"}, {"y", "6"}, {"crc", aExpectedCRC[4]}, {"transparenttype", "bitmap"}
- });
+ if (!bIsSvmFile)
+ {
+ assertXPathAttrs(pDoc, "/metafile/bmpex[3]", {
+ {"x", "0"}, {"y", "6"}, {"crc", aExpectedCRC[4]}, {"transparenttype", "bitmap"}
+ });
+ }
assertXPathAttrs(pDoc, "/metafile/bmpex[4]", {
{"x", "2"}, {"y", "6"}, {"crc", aExpectedCRC[5]}, {"transparenttype", "bitmap"}
});
@@ -1058,6 +1061,8 @@ void SvmTest::checkBitmapExs(const GDIMetaFile& rMetaFile)
assertXPathAttrs(pDoc, "/metafile/bmpex[6]", {
{"x", "2"}, {"y", "8"}, {"crc", aExpectedCRC[7]}, {"transparenttype", "bitmap"}
});
+#else
+ (void)bIsSvmFile;
#endif
}
@@ -1158,12 +1163,12 @@ void SvmTest::testBitmapExs()
{
GDIMetaFile aReloadedGDIMetaFile = writeAndReadStream(aGDIMetaFile);
- checkBitmapExs(aReloadedGDIMetaFile);
+ checkBitmapExs(aReloadedGDIMetaFile, /*bIsSvmFile*/false);
checkRendering(pVirtualDev, aReloadedGDIMetaFile);
}
{
GDIMetaFile aFileGDIMetaFile = readFile(u"bitmapexs.svm");
- checkBitmapExs(aFileGDIMetaFile);
+ checkBitmapExs(aFileGDIMetaFile, /*bIsSvmFile*/true);
checkRendering(pVirtualDev, aFileGDIMetaFile);
}
}
diff --git a/vcl/qt5/QtBitmap.cxx b/vcl/qt5/QtBitmap.cxx
index 666cb673db65..dd83c57c23a5 100644
--- a/vcl/qt5/QtBitmap.cxx
+++ b/vcl/qt5/QtBitmap.cxx
@@ -38,8 +38,6 @@ bool QtBitmap::Create(const Size& rSize, vcl::PixelFormat ePixelFormat, const Bi
if (ePixelFormat == vcl::PixelFormat::INVALID)
return false;
- if (ePixelFormat == vcl::PixelFormat::N1_BPP)
- assert(2 >= rPal.GetEntryCount());
if (ePixelFormat == vcl::PixelFormat::N8_BPP)
assert(256 >= rPal.GetEntryCount());
diff --git a/vcl/source/bitmap/BitmapEx.cxx b/vcl/source/bitmap/BitmapEx.cxx
index 3a07dd61da07..cf50c1976c3a 100644
--- a/vcl/source/bitmap/BitmapEx.cxx
+++ b/vcl/source/bitmap/BitmapEx.cxx
@@ -113,12 +113,11 @@ BitmapEx::BitmapEx( const Bitmap& rBmp, const Bitmap& rMask ) :
if( rMask.getPixelFormat() == vcl::PixelFormat::N8_BPP && rMask.HasGreyPalette8Bit() )
maAlphaMask = rMask;
- else if (rMask.getPixelFormat() == vcl::PixelFormat::N1_BPP)
+ else if( rMask.getPixelFormat() == vcl::PixelFormat::N8_BPP )
{
- // convert 1-bit mask to alpha bitmap
- BitmapEx aBmpEx(rMask);
- BitmapFilter::Filter(aBmpEx, BitmapMaskToAlphaFilter());
- maAlphaMask = aBmpEx.GetBitmap();
+ BitmapEx aMaskEx(rMask);
+ BitmapFilter::Filter(aMaskEx, BitmapMonochromeFilter(255));
+ maAlphaMask = aMaskEx.GetBitmap();
}
else
{
@@ -126,7 +125,6 @@ BitmapEx::BitmapEx( const Bitmap& rBmp, const Bitmap& rMask ) :
SAL_WARN( "vcl", "BitmapEx: forced mask to monochrome");
BitmapEx aMaskEx(rMask);
BitmapFilter::Filter(aMaskEx, BitmapMonochromeFilter(255));
- BitmapFilter::Filter(aMaskEx, BitmapMaskToAlphaFilter());
maAlphaMask = aMaskEx.GetBitmap();
}
diff --git a/vcl/source/bitmap/BitmapMonochromeFilter.cxx b/vcl/source/bitmap/BitmapMonochromeFilter.cxx
index 5c294544aa1e..e45ae12fa6d0 100644
--- a/vcl/source/bitmap/BitmapMonochromeFilter.cxx
+++ b/vcl/source/bitmap/BitmapMonochromeFilter.cxx
@@ -21,7 +21,7 @@ BitmapEx BitmapMonochromeFilter::execute(BitmapEx const& aBitmapEx) const
if (!pReadAcc)
return BitmapEx();
- Bitmap aNewBmp(aBitmap.GetSizePixel(), vcl::PixelFormat::N1_BPP);
+ Bitmap aNewBmp(aBitmap.GetSizePixel(), vcl::PixelFormat::N8_BPP, &Bitmap::GetGreyPalette(256));
BitmapScopedWriteAccess pWriteAcc(aNewBmp);
if (!pWriteAcc)
return BitmapEx();
diff --git a/vcl/source/bitmap/BitmapSimpleColorQuantizationFilter.cxx b/vcl/source/bitmap/BitmapSimpleColorQuantizationFilter.cxx
index 97511ed323b6..38e2c76794b0 100644
--- a/vcl/source/bitmap/BitmapSimpleColorQuantizationFilter.cxx
+++ b/vcl/source/bitmap/BitmapSimpleColorQuantizationFilter.cxx
@@ -28,11 +28,7 @@ BitmapEx BitmapSimpleColorQuantizationFilter::execute(BitmapEx const& aBitmapEx)
return BitmapEx();
const sal_uInt16 nColorCount = std::min(mnNewColorCount, sal_uInt16(256));
- auto ePixelFormat = vcl::PixelFormat::INVALID;
- if (nColorCount <= 2)
- ePixelFormat = vcl::PixelFormat::N1_BPP;
- else
- ePixelFormat = vcl::PixelFormat::N8_BPP;
+ auto ePixelFormat = vcl::PixelFormat::N8_BPP;
Octree aOct(*pRAcc, nColorCount);
const BitmapPalette& rPal = aOct.GetPalette();
diff --git a/vcl/source/bitmap/BitmapTools.cxx b/vcl/source/bitmap/BitmapTools.cxx
index 4628e012abb0..7c19c237d57f 100644
--- a/vcl/source/bitmap/BitmapTools.cxx
+++ b/vcl/source/bitmap/BitmapTools.cxx
@@ -130,15 +130,31 @@ void loadFromSvg(SvStream& rStream, const OUString& sPath, BitmapEx& rBitmapEx,
In case the endianness of pData is wrong, you could reverse colors
*/
BitmapEx CreateFromData(sal_uInt8 const *pData, sal_Int32 nWidth, sal_Int32 nHeight,
- sal_Int32 nStride, vcl::PixelFormat ePixelFormat,
+ sal_Int32 nStride, sal_Int8 nBitCount,
bool bReversColors, bool bReverseAlpha)
{
- auto nBitCount = sal_uInt16(ePixelFormat);
-
assert(nStride >= (nWidth * nBitCount / 8));
- assert(nBitCount == 1 || nBitCount == 24 || nBitCount == 32);
+ assert(nBitCount == 1 || nBitCount == 8 || nBitCount == 24 || nBitCount == 32);
- Bitmap aBmp(Size(nWidth, nHeight), ePixelFormat);
+ PixelFormat ePixelFormat;
+ if (nBitCount == 1)
+ ePixelFormat = PixelFormat::N8_BPP; // we convert 1-bit input data to 8-bit format
+ else if (nBitCount == 8)
+ ePixelFormat = PixelFormat::N8_BPP;
+ else if (nBitCount == 24)
+ ePixelFormat = PixelFormat::N24_BPP;
+ else if (nBitCount == 32)
+ ePixelFormat = PixelFormat::N32_BPP;
+ else
+ std::abort();
+ Bitmap aBmp;
+ if (nBitCount == 1)
+ {
+ BitmapPalette aBiLevelPalette { COL_BLACK, COL_WHITE };
+ aBmp = Bitmap(Size(nWidth, nHeight), PixelFormat::N8_BPP, &aBiLevelPalette);
+ }
+ else
+ aBmp = Bitmap(Size(nWidth, nHeight), ePixelFormat);
BitmapScopedWriteAccess pWrite(aBmp);
assert(pWrite.get());
@@ -174,7 +190,9 @@ BitmapEx CreateFromData(sal_uInt8 const *pData, sal_Int32 nWidth, sal_Int32 nHei
for (tools::Long x = 0; x < nWidth; ++x)
{
BitmapColor col;
- if ( bReversColors )
+ if (nBitCount == 8)
+ col = BitmapColor( *p );
+ else if ( bReversColors )
col = BitmapColor( p[2], p[1], p[0] );
else
col = BitmapColor( p[0], p[1], p[2] );
@@ -1032,7 +1050,7 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, Bitmap & aBitmap, un
aPalette[0] = BitmapColor(aColorBack);
aPalette[1] = BitmapColor(aColorPix);
- Bitmap aBitmap(Size(8, 8), vcl::PixelFormat::N1_BPP, &aPalette);
+ Bitmap aBitmap(Size(8, 8), vcl::PixelFormat::N8_BPP, &aPalette);
BitmapScopedWriteAccess pContent(aBitmap);
for(sal_uInt16 a(0); a < 8; a++)
@@ -1063,58 +1081,37 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, Bitmap & aBitmap, un
if(8 == aBitmap.GetSizePixel().Width() && 8 == aBitmap.GetSizePixel().Height())
{
- if (aBitmap.getPixelFormat() == vcl::PixelFormat::N1_BPP)
- {
- BitmapReadAccess* pRead = aBitmap.AcquireReadAccess();
-
- if(pRead)
+ // Historical 1bpp images are getting really historical,
+ // even to the point that e.g. the png loader actually loads
+ // them as RGB. But the pattern code in svx relies on this
+ // assumption that any 2-color 1bpp bitmap is a pattern, and so it would
+ // get confused by RGB. Try to detect if this image is really
+ // just two colors and say it's a pattern bitmap if so.
+ Bitmap::ScopedReadAccess access(aBitmap);
+ o_rBack = access->GetColor(0,0);
+ bool foundSecondColor = false;;
+ for(tools::Long y = 0; y < access->Height(); ++y)
+ for(tools::Long x = 0; x < access->Width(); ++x)
{
- if(pRead->HasPalette() && 2 == pRead->GetPaletteEntryCount())
+ if(!foundSecondColor)
{
- const BitmapPalette& rPalette = pRead->GetPalette();
- o_rFront = rPalette[1];
- o_rBack = rPalette[0];
-
- bRet = true;
- }
-
- Bitmap::ReleaseAccess(pRead);
- }
- }
- else
- {
- // Historical 1bpp images are getting really historical,
- // even to the point that e.g. the png loader actually loads
- // them as RGB. But the pattern code in svx relies on this
- // assumption that any 2-color 1bpp bitmap is a pattern, and so it would
- // get confused by RGB. Try to detect if this image is really
- // just two colors and say it's a pattern bitmap if so.
- Bitmap::ScopedReadAccess access(aBitmap);
- o_rBack = access->GetColor(0,0);
- bool foundSecondColor = false;;
- for(tools::Long y = 0; y < access->Height(); ++y)
- for(tools::Long x = 0; x < access->Width(); ++x)
- {
- if(!foundSecondColor)
- {
- if( access->GetColor(y,x) != o_rBack )
- {
- o_rFront = access->GetColor(y,x);
- foundSecondColor = true;
- // Hard to know which of the two colors is the background,
- // select the lighter one.
- if( o_rFront.GetLuminance() > o_rBack.GetLuminance())
- std::swap( o_rFront, o_rBack );
- }
- }
- else
+ if( access->GetColor(y,x) != o_rBack )
{
- if( access->GetColor(y,x) != o_rBack && access->GetColor(y,x) != o_rFront)
- return false;
+ o_rFront = access->GetColor(y,x);
+ foundSecondColor = true;
+ // Hard to know which of the two colors is the background,
+ // select the lighter one.
+ if( o_rFront.GetLuminance() > o_rBack.GetLuminance())
+ std::swap( o_rFront, o_rBack );
}
}
- return true;
- }
+ else
+ {
+ if( access->GetColor(y,x) != o_rBack && access->GetColor(y,x) != o_rFront)
+ return false;
+ }
+ }
+ return true;
}
}
diff --git a/vcl/source/bitmap/bitmap.cxx b/vcl/source/bitmap/bitmap.cxx
index fb73e4bb0d48..8214b266b640 100644
--- a/vcl/source/bitmap/bitmap.cxx
+++ b/vcl/source/bitmap/bitmap.cxx
@@ -82,13 +82,6 @@ Bitmap::Bitmap( const Size& rSizePixel, vcl::PixelFormat ePixelFormat, const Bit
switch (ePixelFormat)
{
- case vcl::PixelFormat::N1_BPP:
- {
- static const BitmapPalette aPalN1_BPP = { COL_BLACK, COL_WHITE };
- if (!pPal)
- pPal = &aPalN1_BPP;
- break;
- }
case vcl::PixelFormat::N8_BPP:
{
static const BitmapPalette aPalN8_BPP = [] {
@@ -268,8 +261,6 @@ vcl::PixelFormat Bitmap::getPixelFormat() const
return vcl::PixelFormat::INVALID;
sal_uInt16 nBitCount = mxSalBmp->GetBitCount();
- if (nBitCount <= 1)
- return vcl::PixelFormat::N1_BPP;
if (nBitCount <= 8)
return vcl::PixelFormat::N8_BPP;
if (nBitCount <= 24)
@@ -282,7 +273,7 @@ vcl::PixelFormat Bitmap::getPixelFormat() const
bool Bitmap::HasGreyPaletteAny() const
{
- bool bRet = getPixelFormat() == vcl::PixelFormat::N1_BPP;
+ bool bRet = false;
ScopedInfoAccess pIAcc(const_cast<Bitmap&>(*this));
@@ -1299,22 +1290,6 @@ bool Bitmap::Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag n
}
}
- // fdo#33455
- //
- // If we start with a 1 bit image, then after scaling it in any mode except
- // BmpScaleFlag::Fast we have a 24bit image which is perfectly correct, but we
- // are going to down-shift it to mono again and Bitmap::MakeMonochrome 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::MakeMonochrome
- if (eStartPixelFormat == vcl::PixelFormat::N1_BPP)
- nScaleFlag = BmpScaleFlag::Fast;
-
BitmapEx aBmpEx(*this);
bool bRetval(false);
@@ -1391,11 +1366,6 @@ void Bitmap::AdaptBitCount(Bitmap& rNew) const
switch (getPixelFormat())
{
- case vcl::PixelFormat::N1_BPP:
- {
- rNew.Convert(BmpConversion::N1BitThreshold);
- break;
- }
case vcl::PixelFormat::N8_BPP:
{
if(HasGreyPaletteAny())
diff --git a/vcl/source/bitmap/bitmappaint.cxx b/vcl/source/bitmap/bitmappaint.cxx
index e13e222699a5..388dbe89c57b 100644
--- a/vcl/source/bitmap/bitmappaint.cxx
+++ b/vcl/source/bitmap/bitmappaint.cxx
@@ -837,11 +837,6 @@ bool Bitmap::Replace(const Color& rSearchColor, const Color& rReplaceColor, sal_
}
}
- // Bitmaps with 1 bit color depth can cause problems if they have other entries than black/white
- // in their palette
- if (getPixelFormat() == vcl::PixelFormat::N1_BPP)
- Convert(BmpConversion::N8BitColors);
-
BitmapScopedWriteAccess pAcc(*this);
bool bRet = false;
@@ -900,11 +895,6 @@ bool Bitmap::Replace(const Color& rSearchColor, const Color& rReplaceColor, sal_
bool Bitmap::Replace(const Color* pSearchColors, const Color* pReplaceColors, size_t nColorCount,
sal_uInt8 const* pTols)
{
- // Bitmaps with 1 bit color depth can cause problems if they have other entries than black/white
- // in their palette
- if (getPixelFormat() == vcl::PixelFormat::N1_BPP)
- Convert(BmpConversion::N8BitColors);
-
BitmapScopedWriteAccess pAcc(*this);
bool bRet = false;
diff --git a/vcl/source/bitmap/dibtools.cxx b/vcl/source/bitmap/dibtools.cxx
index e2e9076c5ddb..6bf360d7c861 100644
--- a/vcl/source/bitmap/dibtools.cxx
+++ b/vcl/source/bitmap/dibtools.cxx
@@ -133,8 +133,7 @@ struct DIBV5Header : public DIBInfoHeader
vcl::PixelFormat convertToBPP(sal_uInt16 nCount)
{
- return (nCount <= 1) ? vcl::PixelFormat::N1_BPP :
- (nCount <= 8) ? vcl::PixelFormat::N8_BPP :
+ return (nCount <= 8) ? vcl::PixelFormat::N8_BPP :
vcl::PixelFormat::N24_BPP;
}
@@ -358,7 +357,7 @@ BitmapColor SanitizeColor(const BitmapColor &rColor, bool bForceToMonoWhileReadi
return BitmapColor(static_cast<sal_uInt8>(rColor.GetLuminance() >= 255));
}
-bool ImplDecodeRLE(sal_uInt8* pBuffer, DIBV5Header const & rHeader, BitmapWriteAccess& rAcc, BitmapPalette& rPalette, bool bForceToMonoWhileReading, bool bRLE4)
+bool ImplDecodeRLE(sal_uInt8* pBuffer, DIBV5Header const & rHeader, BitmapWriteAccess& rAcc, BitmapPalette& rPalette, bool bRLE4)
{
Scanline pRLE = pBuffer;
Scanline pEndRLE = pBuffer + rHeader.nSizeImage;
@@ -395,10 +394,10 @@ bool ImplDecodeRLE(sal_uInt8* pBuffer, DIBV5Header const & rHeader, BitmapWriteA
cTmp = *pRLE++;
if( nX < nWidth )
- rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(cTmp >> 4, rPalette, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(cTmp >> 4, rPalette, /*bForceToMonoWhileReading*/false));
if( nX < nWidth )
- rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(cTmp & 0x0f, rPalette, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(cTmp & 0x0f, rPalette, /*bForceToMonoWhileReading*/false));
}
if( nRunByte & 1 )
@@ -407,7 +406,7 @@ bool ImplDecodeRLE(sal_uInt8* pBuffer, DIBV5Header const & rHeader, BitmapWriteA
return false;
if( nX < nWidth )
- rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(*pRLE >> 4, rPalette, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(*pRLE >> 4, rPalette, /*bForceToMonoWhileReading*/false));
pRLE++;
}
@@ -428,7 +427,7 @@ bool ImplDecodeRLE(sal_uInt8* pBuffer, DIBV5Header const & rHeader, BitmapWriteA
return false;
if( nX < nWidth )
- rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(*pRLE, rPalette, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(*pRLE, rPalette, /*bForceToMonoWhileReading*/false));
pRLE++;
}
@@ -475,18 +474,18 @@ bool ImplDecodeRLE(sal_uInt8* pBuffer, DIBV5Header const & rHeader, BitmapWriteA
for (sal_uLong i = 0; i < nRunByte && nX < nWidth; ++i)
{
- rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(cTmp >> 4, rPalette, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(cTmp >> 4, rPalette, /*bForceToMonoWhileReading*/false));
if( nX < nWidth )
- rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(cTmp & 0x0f, rPalette, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(cTmp & 0x0f, rPalette, /*bForceToMonoWhileReading*/false));
}
if( ( nCountByte & 1 ) && ( nX < nWidth ) )
- rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(cTmp >> 4, rPalette, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(cTmp >> 4, rPalette, /*bForceToMonoWhileReading*/false));
}
else
{
for (sal_uLong i = 0; i < nCountByte && nX < nWidth; ++i)
- rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(cTmp, rPalette, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX++, SanitizePaletteIndex(cTmp, rPalette, /*bForceToMonoWhileReading*/false));
}
}
}
@@ -496,8 +495,7 @@ bool ImplDecodeRLE(sal_uInt8* pBuffer, DIBV5Header const & rHeader, BitmapWriteA
}
bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& rAcc, BitmapPalette& rPalette, BitmapWriteAccess* pAccAlpha,
- bool bTopDown, bool& rAlphaUsed, const sal_uInt64 nAlignedWidth,
- const bool bForceToMonoWhileReading)
+ bool bTopDown, bool& rAlphaUsed, const sal_uInt64 nAlignedWidth)
{
sal_uInt32 nRMask(( rHeader.nBitCount == 16 ) ? 0x00007c00UL : 0x00ff0000UL);
sal_uInt32 nGMask(( rHeader.nBitCount == 16 ) ? 0x000003e0UL : 0x0000ff00UL);
@@ -565,7 +563,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
std::vector<sal_uInt8> aBuffer(rHeader.nSizeImage);
if (rIStm.ReadBytes(aBuffer.data(), rHeader.nSizeImage) != rHeader.nSizeImage)
return false;
- if (!ImplDecodeRLE(aBuffer.data(), rHeader, rAcc, rPalette, bForceToMonoWhileReading, RLE_4 == rHeader.nCompression))
+ if (!ImplDecodeRLE(aBuffer.data(), rHeader, rAcc, rPalette, RLE_4 == rHeader.nCompression))
return false;
}
else
@@ -607,7 +605,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
}
auto nIndex = (cTmp >> --nShift) & 1;
- rAcc.SetPixelOnData(pScanline, nX, SanitizePaletteIndex(nIndex, rPalette, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX, SanitizePaletteIndex(nIndex, rPalette, /*bForceToMonoWhileReading*/false));
}
}
}
@@ -634,7 +632,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
}
auto nIndex = (cTmp >> ( --nShift << 2 ) ) & 0x0f;
- rAcc.SetPixelOnData(pScanline, nX, SanitizePaletteIndex(nIndex, rPalette, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX, SanitizePaletteIndex(nIndex, rPalette, /*bForceToMonoWhileReading*/false));
}
}
}
@@ -655,7 +653,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
for( tools::Long nX = 0; nX < nWidth; nX++ )
{
auto nIndex = *pTmp++;
- rAcc.SetPixelOnData(pScanline, nX, SanitizePaletteIndex(nIndex, rPalette, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX, SanitizePaletteIndex(nIndex, rPalette, /*bForceToMonoWhileReading*/false));
}
}
}
@@ -689,7 +687,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
for( tools::Long nX = 0; nX < nWidth; nX++ )
{
aMask.GetColorFor16BitLSB( aColor, reinterpret_cast<sal_uInt8*>(pTmp16++) );
- rAcc.SetPixelOnData(pScanline, nX, SanitizeColor(aColor, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX, SanitizeColor(aColor, /*bForceToMonoWhileReading*/false));
}
}
}
@@ -714,7 +712,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
aPixelColor.SetBlue( *pTmp++ );
aPixelColor.SetGreen( *pTmp++ );
aPixelColor.SetRed( *pTmp++ );
- rAcc.SetPixelOnData(pScanline, nX, SanitizeColor(aPixelColor, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX, SanitizeColor(aPixelColor, /*bForceToMonoWhileReading*/false));
}
}
}
@@ -754,7 +752,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
for( tools::Long nX = 0; nX < nWidth; nX++ )
{
aMask.GetColorAndAlphaFor32Bit( aColor, aAlpha, reinterpret_cast<sal_uInt8*>(pTmp32++) );
- rAcc.SetPixelOnData(pScanline, nX, SanitizeColor(aColor, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX, SanitizeColor(aColor, /*bForceToMonoWhileReading*/false));
pAccAlpha->SetPixelOnData(pAlphaScanline, nX, BitmapColor(sal_uInt8(0xff) - aAlpha));
rAlphaUsed |= 0xff != aAlpha;
}
@@ -775,7 +773,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
for( tools::Long nX = 0; nX < nWidth; nX++ )
{
aMask.GetColorFor32Bit( aColor, reinterpret_cast<sal_uInt8*>(pTmp32++) );
- rAcc.SetPixelOnData(pScanline, nX, SanitizeColor(aColor, bForceToMonoWhileReading));
+ rAcc.SetPixelOnData(pScanline, nX, SanitizeColor(aColor, /*bForceToMonoWhileReading*/false));
}
}
}
@@ -787,7 +785,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
return rIStm.GetError() == ERRCODE_NONE;
}
-bool ImplReadDIBBody(SvStream& rIStm, Bitmap& rBmp, AlphaMask* pBmpAlpha, sal_uInt64 nOffset, bool bIsMask, bool bMSOFormat)
+bool ImplReadDIBBody(SvStream& rIStm, Bitmap& rBmp, AlphaMask* pBmpAlpha, sal_uInt64 nOffset, bool bMSOFormat)
{
DIBV5Header aHeader;
const sal_uInt64 nStmPos = rIStm.Tell();
@@ -1011,15 +1009,6 @@ bool ImplReadDIBBody(SvStream& rIStm, Bitmap& rBmp, AlphaMask* pBmpAlpha, sal_uI
const BitmapPalette* pPal = &aPalette;
//ofz#948 match the surrounding logic of case TransparentType::Bitmap of
//ReadDIBBitmapEx but do it while reading for performance
- const bool bIsAlpha = (ePixelFormat == vcl::PixelFormat::N8_BPP &&
- !!aPalette && aPalette.IsGreyPalette8Bit());
- const bool bForceToMonoWhileReading = (bIsMask && !bIsAlpha && ePixelFormat != vcl::PixelFormat::N1_BPP);
- if (bForceToMonoWhileReading)
- {
- pPal = nullptr;
- ePixelFormat = vcl::PixelFormat::N1_BPP;
- SAL_WARN( "vcl", "forcing mask to monochrome");
- }
Bitmap aNewBmp(aSizePixel, ePixelFormat, pPal);
BitmapScopedWriteAccess pAcc(aNewBmp);
@@ -1032,7 +1021,7 @@ bool ImplReadDIBBody(SvStream& rIStm, Bitmap& rBmp, AlphaMask* pBmpAlpha, sal_uI
// read bits
bool bAlphaUsed(false);
- bool bRet = ImplReadDIBBits(*pIStm, aHeader, *pAcc, aPalette, pAccAlpha.get(), bTopDown, bAlphaUsed, nAlignedWidth, bForceToMonoWhileReading);
+ bool bRet = ImplReadDIBBits(*pIStm, aHeader, *pAcc, aPalette, pAccAlpha.get(), bTopDown, bAlphaUsed, nAlignedWidth);
if (bRet && aHeader.nXPelsPerMeter && aHeader.nYPelsPerMeter)
{
@@ -1330,36 +1319,6 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead
std::vector<sal_uInt8> aBuf(nAlignedWidth);
switch(ePixelFormat)
{
- case vcl::PixelFormat::N1_BPP:
- {
- //valgrind, zero out the trailing unused alignment bytes
- size_t nUnusedBytes = nAlignedWidth - ((nWidth+7) / 8);
- memset(aBuf.data() + nAlignedWidth - nUnusedBytes, 0, nUnusedBytes);
-
- for( tools::Long nY = nHeight - 1; nY >= 0; nY-- )
- {
- sal_uInt8* pTmp = aBuf.data();
- sal_uInt8 cTmp = 0;
- Scanline pScanline = rAcc.GetScanline( nY );
-
- for( tools::Long nX = 0, nShift = 8; nX < nWidth; nX++ )
- {
- if( !nShift )
- {
- nShift = 8;
- *pTmp++ = cTmp;
- cTmp = 0;
- }
-
- cTmp |= rAcc.GetIndexFromData( pScanline, nX ) << --nShift;
- }
-
- *pTmp = cTmp;
- rOStm.WriteBytes(aBuf.data(), nAlignedWidth);
- }
- }
- break;
-
case vcl::PixelFormat::N8_BPP:
{
for( tools::Long nY = nHeight - 1; nY >= 0; nY-- )
@@ -1618,7 +1577,6 @@ bool ImplReadDIB(
AlphaMask* pTargetAlpha,
SvStream& rIStm,
bool bFileHeader,
- bool bIsMask=false,
bool bMSOFormat=false)
{
const SvStreamEndian nOldFormat(rIStm.GetEndian());
@@ -1632,12 +1590,12 @@ bool ImplReadDIB(
{
if(ImplReadDIBFileHeader(rIStm, nOffset))
{
- bRet = ImplReadDIBBody(rIStm, rTarget, nOffset >= DIBV5HEADERSIZE ? pTargetAlpha : nullptr, nOffset, bIsMask, bMSOFormat);
+ bRet = ImplReadDIBBody(rIStm, rTarget, nOffset >= DIBV5HEADERSIZE ? pTargetAlpha : nullptr, nOffset, bMSOFormat);
}
}
else
{
- bRet = ImplReadDIBBody(rIStm, rTarget, nullptr, nOffset, bIsMask, bMSOFormat);
+ bRet = ImplReadDIBBody(rIStm, rTarget, nullptr, nOffset, bMSOFormat);
}
if(!bRet)
@@ -1712,7 +1670,7 @@ bool ReadDIB(
bool bFileHeader,
bool bMSOFormat)
{
- return ImplReadDIB(rTarget, nullptr, rIStm, bFileHeader, false, bMSOFormat);
+ return ImplReadDIB(rTarget, nullptr, rIStm, bFileHeader, bMSOFormat);
}
bool ReadDIBBitmapEx(
@@ -1722,7 +1680,7 @@ bool ReadDIBBitmapEx(
bool bMSOFormat)
{
Bitmap aBmp;
- bool bRetval(ImplReadDIB(aBmp, nullptr, rIStm, bFileHeader, /*bMask*/false, bMSOFormat) && !rIStm.GetError());
+ bool bRetval(ImplReadDIB(aBmp, nullptr, rIStm, bFileHeader, bMSOFormat) && !rIStm.GetError());
if(bRetval)
{
@@ -1750,7 +1708,7 @@ bool ReadDIBBitmapEx(
{
Bitmap aMask;
- bRetval = ImplReadDIB(aMask, nullptr, rIStm, true, true);
+ bRetval = ImplReadDIB(aMask, nullptr, rIStm, true);
if(bRetval)
{
diff --git a/vcl/source/filter/igif/gifread.cxx b/vcl/source/filter/igif/gifread.cxx
index 5e07db10415e..7cdc37710f51 100644
--- a/vcl/source/filter/igif/gifread.cxx
+++ b/vcl/source/filter/igif/gifread.cxx
@@ -219,7 +219,7 @@ void GIFReader::CreateBitmaps(tools::Long nWidth, tools::Long nHeight, BitmapPal
{
const Color aWhite(COL_WHITE);
- aBmp1 = Bitmap(aSize, vcl::PixelFormat::N1_BPP);
+ aBmp1 = Bitmap(aSize, vcl::PixelFormat::N8_BPP, &Bitmap::GetGreyPalette(256));
if (!aAnimation.Count())
aBmp1.Erase(aWhite);
diff --git a/vcl/source/filter/ixbm/xbmread.cxx b/vcl/source/filter/ixbm/xbmread.cxx
index 9368f9f9a885..7546d44f8681 100644
--- a/vcl/source/filter/ixbm/xbmread.cxx
+++ b/vcl/source/filter/ixbm/xbmread.cxx
@@ -330,7 +330,7 @@ ReadState XBMReader::ReadXBM( Graphic& rGraphic )
if ( bStatus && nWidth && nHeight )
{
- aBmp1 = Bitmap(Size(nWidth, nHeight), vcl::PixelFormat::N1_BPP);
+ aBmp1 = Bitmap(Size(nWidth, nHeight), vcl::PixelFormat::N8_BPP, &Bitmap::GetGreyPalette(256));
pAcc1 = BitmapScopedWriteAccess(aBmp1);
if( pAcc1 )
@@ -349,7 +349,7 @@ ReadState XBMReader::ReadXBM( Graphic& rGraphic )
if (bStatus && pAcc1)
{
- Bitmap aBlackBmp(Size(pAcc1->Width(), pAcc1->Height()), vcl::PixelFormat::N1_BPP);
+ Bitmap aBlackBmp(Size(pAcc1->Width(), pAcc1->Height()), vcl::PixelFormat::N8_BPP, &Bitmap::GetGreyPalette(256));
pAcc1.reset();
aBlackBmp.Erase( COL_BLACK );
diff --git a/vcl/source/filter/ixpm/xpmread.cxx b/vcl/source/filter/ixpm/xpmread.cxx
index 2a979d2df238..a678f2316ad3 100644
--- a/vcl/source/filter/ixpm/xpmread.cxx
+++ b/vcl/source/filter/ixpm/xpmread.cxx
@@ -197,10 +197,8 @@ ReadState XPMReader::ReadXPM( Graphic& rGraphic )
auto ePixelFormat = vcl::PixelFormat::INVALID;
if ( mnColors > 256 )
ePixelFormat = vcl::PixelFormat::N24_BPP;
- else if ( mnColors > 2 )
- ePixelFormat = vcl::PixelFormat::N8_BPP;
else
- ePixelFormat = vcl::PixelFormat::N1_BPP;
+ ePixelFormat = vcl::PixelFormat::N8_BPP;
maBmp = Bitmap(Size(mnWidth, mnHeight), ePixelFormat);
mpAcc = BitmapScopedWriteAccess(maBmp);
@@ -208,7 +206,7 @@ ReadState XPMReader::ReadXPM( Graphic& rGraphic )
// mbTransparent is TRUE if at least one colour is transparent
if ( mbTransparent )
{
- maMaskBmp = Bitmap(Size(mnWidth, mnHeight), vcl::PixelFormat::N1_BPP);
+ maMaskBmp = Bitmap(Size(mnWidth, mnHeight), vcl::PixelFormat::N8_BPP, &Bitmap::GetGreyPalette(256));
mpMaskAcc = BitmapScopedWriteAccess(maMaskBmp);
if ( !mpMaskAcc )
mbStatus = false;
diff --git a/vcl/source/filter/jpeg/JpegReader.cxx b/vcl/source/filter/jpeg/JpegReader.cxx
index c68ba88d7a16..f7443f3bfe9e 100644
--- a/vcl/source/filter/jpeg/JpegReader.cxx
+++ b/vcl/source/filter/jpeg/JpegReader.cxx
@@ -249,7 +249,7 @@ Graphic JPEGReader::CreateIntermediateGraphic(tools::Long nLines)
if (!mnLastLines)
{
- mpIncompleteAlpha.reset(new Bitmap(aSizePixel, vcl::PixelFormat::N1_BPP));
+ mpIncompleteAlpha.reset(new Bitmap(aSizePixel, vcl::PixelFormat::N8_BPP, &Bitmap::GetGreyPalette(256)));
mpIncompleteAlpha->Erase(COL_WHITE);
}
diff --git a/vcl/source/gdi/mtfxmldump.cxx b/vcl/source/gdi/mtfxmldump.cxx
index 5319c2834686..d95578dbb9da 100644
--- a/vcl/source/gdi/mtfxmldump.cxx
+++ b/vcl/source/gdi/mtfxmldump.cxx
@@ -429,7 +429,6 @@ OUString convertPixelFormatToString(vcl::PixelFormat ePixelFormat)
switch (ePixelFormat)
{
case vcl::PixelFormat::INVALID: return "INVALID";
- case vcl::PixelFormat::N1_BPP: return "1BPP";
case vcl::PixelFormat::N8_BPP: return "8BPP";
case vcl::PixelFormat::N24_BPP: return "24BPP";
case vcl::PixelFormat::N32_BPP: return "32BPP";
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index c0d85aa99878..e0f868d5d926 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -9209,9 +9209,12 @@ bool PDFWriterImpl::writeBitmapObject( const BitmapEmit& rObject, bool bMask )
{
if( m_aContext.Version < PDFWriter::PDFVersion::PDF_1_4 || ! rObject.m_aBitmap.IsAlpha() )
{
- aBitmap = getExportBitmap(rObject.m_aBitmap.GetAlphaMask());
- aBitmap.Convert( BmpConversion::N1BitThreshold );
- SAL_WARN_IF(aBitmap.getPixelFormat() != vcl::PixelFormat::N1_BPP, "vcl.pdfwriter", "mask conversion failed" );
+ if( rObject.m_aBitmap.IsAlpha() )
+ {
+ aBitmap = getExportBitmap(rObject.m_aBitmap.GetAlphaMask());
+ aBitmap.Convert( BmpConversion::N1BitThreshold );
+ SAL_WARN_IF(aBitmap.getPixelFormat() != vcl::PixelFormat::N8_BPP, "vcl.pdfwriter", "mask conversion failed" );
+ }
}
else if (aBitmap.getPixelFormat() != vcl::PixelFormat::N8_BPP)
{
@@ -9228,7 +9231,6 @@ bool PDFWriterImpl::writeBitmapObject( const BitmapEmit& rObject, bool bMask )
auto const ePixelFormat = aBitmap.getPixelFormat();
switch (ePixelFormat)
{
- case vcl::PixelFormat::N1_BPP:
case vcl::PixelFormat::N8_BPP:
bTrueColor = false;
nBitsPerComponent = vcl::pixelFormatBitCount(ePixelFormat);
@@ -9282,7 +9284,7 @@ bool PDFWriterImpl::writeBitmapObject( const BitmapEmit& rObject, bool bMask )
else if( aBitmap.HasGreyPaletteAny() )
{
aLine.append( "/DeviceGray\n" );
- if (aBitmap.getPixelFormat() == vcl::PixelFormat::N1_BPP)
+ if (aBitmap.getPixelFormat() == vcl::PixelFormat::N8_BPP)
{
// #i47395# 1 bit bitmaps occasionally have an inverted grey palette
sal_uInt16 nBlackIndex = pAccess->GetBestPaletteIndex( BitmapColor( COL_BLACK ) );
@@ -9355,21 +9357,8 @@ bool PDFWriterImpl::writeBitmapObject( const BitmapEmit& rObject, bool bMask )
}
else
{
- if (aBitmap.getPixelFormat() == vcl::PixelFormat::N1_BPP)
- {
- aLine.append( "/ImageMask true\n" );
- sal_Int32 nBlackIndex = pAccess->GetBestPaletteIndex( BitmapColor( COL_BLACK ) );
- SAL_WARN_IF( nBlackIndex != 0 && nBlackIndex != 1, "vcl.pdfwriter", "wrong black index" );
- if( nBlackIndex )
- aLine.append( "/Decode[ 1 0 ]\n" );
- else
- aLine.append( "/Decode[ 0 1 ]\n" );
- }
- else if (aBitmap.getPixelFormat() == vcl::PixelFormat::N8_BPP)
- {
- aLine.append( "/ColorSpace/DeviceGray\n"
- "/Decode [ 1 0 ]\n" );
- }
+ aLine.append( "/ColorSpace/DeviceGray\n"
+ "/Decode [ 1 0 ]\n" );
}
if( ! bMask && m_aContext.Version > PDFWriter::PDFVersion::PDF_1_2 && !m_bIsPDF_A1 )
@@ -9614,10 +9603,7 @@ const BitmapEmit& PDFWriterImpl::createBitmapEmit(const BitmapEx& i_rBitmap, con
BitmapEx aBitmap( i_rBitmap );
auto ePixelFormat = aBitmap.GetBitmap().getPixelFormat();
if( m_aContext.ColorMode == PDFWriter::DrawGreyscale )
- {
- if (ePixelFormat != vcl::PixelFormat::N1_BPP)
- aBitmap.Convert(BmpConversion::N8BitGreys);
- }
+ aBitmap.Convert(BmpConversion::N8BitGreys);
BitmapID aID;
aID.m_aPixelSize = aBitmap.GetSizePixel();
aID.m_nSize = vcl::pixelFormatBitCount(ePixelFormat);
diff --git a/vcl/source/gdi/pdfwriter_impl2.cxx b/vcl/source/gdi/pdfwriter_impl2.cxx
index ef82bdeee41f..d342c7a229a9 100644
--- a/vcl/source/gdi/pdfwriter_impl2.cxx
+++ b/vcl/source/gdi/pdfwriter_impl2.cxx
@@ -164,11 +164,7 @@ void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSiz
return;
if( m_aContext.ColorMode == PDFWriter::DrawGreyscale )
- {
- auto ePixelFormat = aBitmapEx.GetBitmap().getPixelFormat();
- if (ePixelFormat != vcl::PixelFormat::N1_BPP)
- aBitmapEx.Convert(BmpConversion::N8BitGreys);
- }
+ aBitmapEx.Convert(BmpConversion::N8BitGreys);
bool bUseJPGCompression = !i_rContext.m_bOnlyLosslessCompression;
if ( bIsPng || ( aSizePixel.Width() < 32 ) || ( aSizePixel.Height() < 32 ) )
bUseJPGCompression = false;
diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx
index 6d014525aae0..95525639e493 100644
--- a/vcl/source/gdi/print.cxx
+++ b/vcl/source/gdi/print.cxx
@@ -110,7 +110,7 @@ void Printer::ImplPrintTransparent( const Bitmap& rBmp, const Bitmap& rMask,
Bitmap aPaint( rBmp ), aMask( rMask );
BmpMirrorFlags nMirrFlags = BmpMirrorFlags::NONE;
- if (aMask.getPixelFormat() > vcl::PixelFormat::N1_BPP)
+ if (aMask.getPixelFormat() >= vcl::PixelFormat::N8_BPP)
aMask.Convert( BmpConversion::N1BitThreshold );
// mirrored horizontally
@@ -146,7 +146,7 @@ void Printer::ImplPrintTransparent( const Bitmap& rBmp, const Bitmap& rMask,
// we always want to have a mask
if( aMask.IsEmpty() )
{
- aMask = Bitmap(aSrcRect.GetSize(), vcl::PixelFormat::N1_BPP);
+ aMask = Bitmap(aSrcRect.GetSize(), vcl::PixelFormat::N8_BPP, &Bitmap::GetGreyPalette(256));
aMask.Erase( COL_BLACK );
}
@@ -703,7 +703,7 @@ void Printer::DrawDeviceMask( const Bitmap& rMask, const Color& rMaskColor,
Bitmap aMask( rMask );
BmpMirrorFlags nMirrFlags = BmpMirrorFlags::NONE;
- if (aMask.getPixelFormat() > vcl::PixelFormat::N1_BPP)
+ if (aMask.getPixelFormat() >= vcl::PixelFormat::N8_BPP)
aMask.Convert( BmpConversion::N1BitThreshold );
// mirrored horizontally
diff --git a/vcl/source/helper/canvastools.cxx b/vcl/source/helper/canvastools.cxx
index 595f12a959c8..e41417b8bdfe 100644
--- a/vcl/source/helper/canvastools.cxx
+++ b/vcl/source/helper/canvastools.cxx
@@ -267,12 +267,9 @@ namespace vcl::unotools
// normalize bitcount
auto ePixelFormat =
- ( nDepth <= 1 ) ? vcl::PixelFormat::N1_BPP :
( nDepth <= 8 ) ? vcl::PixelFormat::N8_BPP :
vcl::PixelFormat::N24_BPP;
- auto eAlphaPixelFormat =
- ( nAlphaDepth <= 1 ) ? vcl::PixelFormat::N1_BPP :
- vcl::PixelFormat::N8_BPP;
+ auto eAlphaPixelFormat = vcl::PixelFormat::N8_BPP;
::Bitmap aBitmap( aPixelSize,
ePixelFormat,
diff --git a/vcl/source/rendercontext/drawmode.cxx b/vcl/source/rendercontext/drawmode.cxx
index f33320d16216..995017c1f5b1 100644
--- a/vcl/source/rendercontext/drawmode.cxx
+++ b/vcl/source/rendercontext/drawmode.cxx
@@ -245,7 +245,8 @@ BitmapEx GetBitmapEx(BitmapEx const& rBitmapEx, DrawModeFlags nDrawMode)
if (nDrawMode & (DrawModeFlags::BlackBitmap | DrawModeFlags::WhiteBitmap))
{
- Bitmap aColorBmp(aBmpEx.GetSizePixel(), vcl::PixelFormat::N1_BPP);
+ Bitmap aColorBmp(aBmpEx.GetSizePixel(), vcl::PixelFormat::N8_BPP,
+ &Bitmap::GetGreyPalette(256));
sal_uInt8 cCmpVal;
if (nDrawMode & DrawModeFlags::BlackBitmap)
diff --git a/vcl/unx/generic/gdi/salbmp.cxx b/vcl/unx/generic/gdi/salbmp.cxx
index 804b50184af6..0f0d433e15f4 100644
--- a/vcl/unx/generic/gdi/salbmp.cxx
+++ b/vcl/unx/generic/gdi/salbmp.cxx
@@ -125,9 +125,6 @@ std::unique_ptr<BitmapBuffer> X11SalBitmap::ImplCreateDIB(
switch(ePixelFormat)
{
- case vcl::PixelFormat::N1_BPP:
- pDIB->mnFormat |= ScanlineFormat::N1BitMsbPal;
- break;
case vcl::PixelFormat::N8_BPP:
pDIB->mnFormat |= ScanlineFormat::N8BitPal;
break;