summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel <noel.grandin@collabora.co.uk>2021-03-29 14:23:16 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-03-31 09:22:27 +0200
commita6c6f35ccc78e74cfa76397d649c1b6fc4baad29 (patch)
tree61c47ee4099b8db2996e2c00ba99dbe5f79ab68d
parent5c90f3d28de6262bb730bad106d4652e458054df (diff)
drop 4bpp image formats
on a path to simplifying our internal bitmap stuff, aiming to support a smaller set of image formats, but support them in an accelerated fashion. Change-Id: I5f8bf3cd49abf16ce460771492cdd5f358cb34df Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113313 Tested-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--include/vcl/bitmap.hxx4
-rw-r--r--include/vcl/bitmap/BitmapTypes.hxx4
-rw-r--r--vcl/qa/cppunit/BitmapTest.cxx62
-rw-r--r--vcl/qa/cppunit/canvasbitmaptest.cxx1
-rw-r--r--vcl/qa/cppunit/svm/svmtest.cxx4
-rw-r--r--vcl/source/bitmap/BitmapEmbossGreyFilter.cxx2
-rw-r--r--vcl/source/bitmap/BitmapSobelGreyFilter.cxx2
-rw-r--r--vcl/source/bitmap/bitmap.cxx45
-rw-r--r--vcl/source/bitmap/bitmappaint.cxx4
-rw-r--r--vcl/source/gdi/pdfwriter_impl.cxx5
-rw-r--r--vcl/source/gdi/pdfwriter_impl2.cxx5
-rw-r--r--vcl/source/helper/canvastools.cxx1
12 files changed, 22 insertions, 117 deletions
diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx
index 1bfc484fee5b..eaec09ad7037 100644
--- a/include/vcl/bitmap.hxx
+++ b/include/vcl/bitmap.hxx
@@ -72,8 +72,6 @@ enum class BmpConversion
{
NNONE,
N1BitThreshold,
- N4BitGreys,
- N4BitColors,
N8BitGreys,
N8BitColors,
N24Bit,
@@ -526,7 +524,7 @@ public:
const std::shared_ptr<SalBitmap>& ImplGetSalBitmap() const { return mxSalBmp; }
SAL_DLLPRIVATE void ImplSetSalBitmap( const std::shared_ptr<SalBitmap>& xImpBmp );
- SAL_DLLPRIVATE bool ImplMakeGreyscales( sal_uInt16 nGreyscales );
+ SAL_DLLPRIVATE bool ImplMakeGreyscales();
public:
diff --git a/include/vcl/bitmap/BitmapTypes.hxx b/include/vcl/bitmap/BitmapTypes.hxx
index 866cf0b2950e..7ebf9fc8dafc 100644
--- a/include/vcl/bitmap/BitmapTypes.hxx
+++ b/include/vcl/bitmap/BitmapTypes.hxx
@@ -17,7 +17,6 @@ enum class PixelFormat
{
INVALID = 0,
N1_BPP = 1,
- N4_BPP = 4,
N8_BPP = 8,
N24_BPP = 24,
N32_BPP = 32
@@ -37,7 +36,8 @@ constexpr PixelFormat bitDepthToPixelFormat(sal_uInt16 nBitDepth)
case 1:
return PixelFormat::N1_BPP;
case 4:
- return PixelFormat::N4_BPP;
+ assert(false);
+ break;
case 8:
return PixelFormat::N8_BPP;
case 24:
diff --git a/vcl/qa/cppunit/BitmapTest.cxx b/vcl/qa/cppunit/BitmapTest.cxx
index 4a7cc5cc0477..655e76dc21fc 100644
--- a/vcl/qa/cppunit/BitmapTest.cxx
+++ b/vcl/qa/cppunit/BitmapTest.cxx
@@ -34,7 +34,6 @@ class BitmapTest : public CppUnit::TestFixture
void testCreation();
void testEmpty();
void testMonochrome();
- void testN4Greyscale();
void testN8Greyscale();
void testConvert();
void testCRC();
@@ -52,7 +51,6 @@ class BitmapTest : public CppUnit::TestFixture
CPPUNIT_TEST(testEmpty);
CPPUNIT_TEST(testMonochrome);
CPPUNIT_TEST(testConvert);
- CPPUNIT_TEST(testN4Greyscale);
CPPUNIT_TEST(testN8Greyscale);
CPPUNIT_TEST(testCRC);
CPPUNIT_TEST(testGreyPalette);
@@ -113,20 +111,6 @@ void BitmapTest::testCreation()
}
{
- Bitmap aBmp(Size(10, 10), vcl::PixelFormat::N4_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 bit count", static_cast<sal_uInt16>(4),
- aBmp.GetBitCount());
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong color count", sal_Int64(16), aBmp.GetColorCount());
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong byte size", static_cast<sal_uLong>(50),
- 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());
@@ -260,48 +244,6 @@ void BitmapTest::testMonochrome()
aBmpReadAccess.GetColor(3, 3));
}
-void BitmapTest::testN4Greyscale()
-{
- Bitmap aBmp = createTestBitmap();
- BitmapPalette aGreyscalePalette = Bitmap::GetGreyPalette(16);
-
- aBmp.Convert(BmpConversion::N4BitGreys);
- BitmapReadAccess aBmpReadAccess(aBmp);
-
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Black pixel wrong 8-bit greyscale value", aGreyscalePalette[0],
- aBmpReadAccess.GetColor(0, 0));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Blue pixel wrong 8-bit greyscale value", aGreyscalePalette[0],
- aBmpReadAccess.GetColor(0, 1));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Green pixel wrong 8-bit greyscale value", aGreyscalePalette[4],
- aBmpReadAccess.GetColor(0, 2));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Cyan pixel wrong 8-bit greyscale value", aGreyscalePalette[5],
- aBmpReadAccess.GetColor(0, 3));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Red pixel wrong 8-bit greyscale value", aGreyscalePalette[2],
- aBmpReadAccess.GetColor(1, 0));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Magenta pixel wrong 8-bit greyscale value", aGreyscalePalette[3],
- aBmpReadAccess.GetColor(1, 1));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Brown pixel wrong 8-bit greyscale value", aGreyscalePalette[7],
- aBmpReadAccess.GetColor(1, 2));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Gray pixel wrong 8-bit greyscale value", aGreyscalePalette[8],
- aBmpReadAccess.GetColor(1, 3));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Light gray pixel wrong 8-bit greyscale value",
- aGreyscalePalette[12], aBmpReadAccess.GetColor(2, 0));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Light blue pixel wrong 8-bit greyscale value",
- aGreyscalePalette[1], aBmpReadAccess.GetColor(2, 1));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Light green pixel wrong 8-bit greyscale value",
- aGreyscalePalette[9], aBmpReadAccess.GetColor(2, 2));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Light cyan pixel wrong 8-bit greyscale value",
- aGreyscalePalette[11], aBmpReadAccess.GetColor(2, 3));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Light red pixel wrong 8-bit greyscale value",
- aGreyscalePalette[4], aBmpReadAccess.GetColor(3, 0));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Light magenta pixel wrong 8-bit greyscale value",
- aGreyscalePalette[6], aBmpReadAccess.GetColor(3, 1));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("Yellow pixel wrong 8-bit greyscale value", aGreyscalePalette[14],
- aBmpReadAccess.GetColor(3, 2));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("White pixel wrong 8-bit greyscale value", aGreyscalePalette[15],
- aBmpReadAccess.GetColor(3, 3));
-}
-
void BitmapTest::testN8Greyscale()
{
Bitmap aBmp = createTestBitmap();
@@ -686,8 +628,8 @@ void BitmapTest::testDitherSize()
void BitmapTest::testMirror()
{
- vcl::PixelFormat bppArray[] = { vcl::PixelFormat::N4_BPP, vcl::PixelFormat::N8_BPP,
- vcl::PixelFormat::N24_BPP, vcl::PixelFormat::N32_BPP };
+ vcl::PixelFormat bppArray[]
+ = { vcl::PixelFormat::N8_BPP, vcl::PixelFormat::N24_BPP, vcl::PixelFormat::N32_BPP };
for (vcl::PixelFormat bpp : bppArray)
{
diff --git a/vcl/qa/cppunit/canvasbitmaptest.cxx b/vcl/qa/cppunit/canvasbitmaptest.cxx
index a741814adb41..cfa6b418c958 100644
--- a/vcl/qa/cppunit/canvasbitmaptest.cxx
+++ b/vcl/qa/cppunit/canvasbitmaptest.cxx
@@ -636,7 +636,6 @@ void CanvasBitmapTest::runTest()
static vcl::PixelFormat ePixelFormatArray[] =
{
vcl::PixelFormat::N1_BPP,
- vcl::PixelFormat::N4_BPP,
vcl::PixelFormat::N8_BPP,
vcl::PixelFormat::N24_BPP
};
diff --git a/vcl/qa/cppunit/svm/svmtest.cxx b/vcl/qa/cppunit/svm/svmtest.cxx
index 29254fe9c323..d9687cb135f1 100644
--- a/vcl/qa/cppunit/svm/svmtest.cxx
+++ b/vcl/qa/cppunit/svm/svmtest.cxx
@@ -1084,14 +1084,14 @@ void SvmTest::testBitmapExs()
pVirtualDev->DrawBitmapEx(Point(0, 6), BitmapEx(aBitmap, COL_WHITE));
}
- // DrawBitmapEx - 4-bit
+ // DrawBitmapEx - used to be 4-bit
{
Bitmap aBitmap(Size(2, 2), vcl::PixelFormat::N24_BPP);
{
BitmapScopedWriteAccess pAccess(aBitmap);
pAccess->Erase(COL_MAGENTA);
}
- aBitmap.Convert(BmpConversion::N4BitColors);
+ aBitmap.Convert(BmpConversion::N8BitColors);
pVirtualDev->DrawBitmapEx(Point(2, 6), BitmapEx(aBitmap, COL_WHITE));
}
diff --git a/vcl/source/bitmap/BitmapEmbossGreyFilter.cxx b/vcl/source/bitmap/BitmapEmbossGreyFilter.cxx
index af8e5e9914ba..0ace97a9b630 100644
--- a/vcl/source/bitmap/BitmapEmbossGreyFilter.cxx
+++ b/vcl/source/bitmap/BitmapEmbossGreyFilter.cxx
@@ -24,7 +24,7 @@ BitmapEx BitmapEmbossGreyFilter::execute(BitmapEx const& rBitmapEx) const
{
Bitmap aBitmap(rBitmapEx.GetBitmap());
- bool bRet = aBitmap.ImplMakeGreyscales(256);
+ bool bRet = aBitmap.ImplMakeGreyscales();
if (bRet)
{
diff --git a/vcl/source/bitmap/BitmapSobelGreyFilter.cxx b/vcl/source/bitmap/BitmapSobelGreyFilter.cxx
index 74e8c233d225..c11fcbd3ad02 100644
--- a/vcl/source/bitmap/BitmapSobelGreyFilter.cxx
+++ b/vcl/source/bitmap/BitmapSobelGreyFilter.cxx
@@ -22,7 +22,7 @@ BitmapEx BitmapSobelGreyFilter::execute(BitmapEx const& rBitmapEx) const
{
Bitmap aBitmap(rBitmapEx.GetBitmap());
- bool bRet = aBitmap.ImplMakeGreyscales(256);
+ bool bRet = aBitmap.ImplMakeGreyscales();
if (bRet)
{
diff --git a/vcl/source/bitmap/bitmap.cxx b/vcl/source/bitmap/bitmap.cxx
index ab83d18bd004..e9bf5554169c 100644
--- a/vcl/source/bitmap/bitmap.cxx
+++ b/vcl/source/bitmap/bitmap.cxx
@@ -92,8 +92,7 @@ Bitmap::Bitmap( const Size& rSizePixel, vcl::PixelFormat ePixelFormat, const Bit
aPal[ 0 ] = COL_BLACK;
aPal[ 1 ] = COL_WHITE;
}
- else if (ePixelFormat == vcl::PixelFormat::N4_BPP ||
- ePixelFormat == vcl::PixelFormat::N8_BPP)
+ else if (ePixelFormat == vcl::PixelFormat::N8_BPP)
{
aPal.SetEntryCount(1 << sal_uInt16(ePixelFormat));
aPal[ 0 ] = COL_BLACK;
@@ -326,7 +325,7 @@ vcl::PixelFormat Bitmap::getPixelFormat() const
switch (GetBitCount())
{
case 1: return vcl::PixelFormat::N1_BPP;
- case 4: return vcl::PixelFormat::N4_BPP;
+ case 4: assert(false); break;
case 8: return vcl::PixelFormat::N8_BPP;
case 24: return vcl::PixelFormat::N24_BPP;
case 32: return vcl::PixelFormat::N32_BPP;
@@ -568,8 +567,7 @@ bool Bitmap::CopyPixel( const tools::Rectangle& rRectDst,
}
else if (nSrcBitCount == 4)
{
- Convert( BmpConversion::N4BitColors );
- nNextIndex = 2;
+ assert(false);
}
if( nNextIndex )
@@ -998,24 +996,9 @@ bool Bitmap::Convert( BmpConversion eConversion )
}
break;
- case BmpConversion::N4BitGreys:
- bRet = ImplMakeGreyscales( 16 );
- break;
-
- case BmpConversion::N4BitColors:
- {
- if( nBitCount < 4 )
- bRet = ImplConvertUp(vcl::PixelFormat::N4_BPP);
- else if( nBitCount > 4 )
- bRet = ImplConvertDown(vcl::PixelFormat::N4_BPP);
- else
- bRet = true;
- }
- break;
-
case BmpConversion::N8BitGreys:
case BmpConversion::N8BitNoConversion:
- bRet = ImplMakeGreyscales( 256 );
+ bRet = ImplMakeGreyscales();
break;
case BmpConversion::N8BitColors:
@@ -1066,17 +1049,15 @@ bool Bitmap::Convert( BmpConversion eConversion )
return bRet;
}
-bool Bitmap::ImplMakeGreyscales( sal_uInt16 nGreys )
+bool Bitmap::ImplMakeGreyscales()
{
- SAL_WARN_IF( nGreys != 16 && nGreys != 256, "vcl", "Only 16 or 256 greyscales are supported!" );
-
ScopedReadAccess pReadAcc(*this);
bool bRet = false;
if( pReadAcc )
{
- const BitmapPalette& rPal = GetGreyPalette( nGreys );
- sal_uLong nShift = ( ( nGreys == 16 ) ? 4UL : 0UL );
+ const BitmapPalette& rPal = GetGreyPalette(256);
+ sal_uLong nShift = 0;
bool bPalDiffers = !pReadAcc->HasPalette() || ( rPal.GetEntryCount() != pReadAcc->GetPaletteEntryCount() );
if( !bPalDiffers )
@@ -1084,8 +1065,7 @@ bool Bitmap::ImplMakeGreyscales( sal_uInt16 nGreys )
if( bPalDiffers )
{
- auto ePixelFormat = nGreys == 16 ? vcl::PixelFormat::N4_BPP
- : vcl::PixelFormat::N8_BPP;
+ const auto ePixelFormat = vcl::PixelFormat::N8_BPP;
Bitmap aNewBmp(GetSizePixel(), ePixelFormat, &rPal );
BitmapScopedWriteAccess pWriteAcc(aNewBmp);
@@ -1535,14 +1515,7 @@ void Bitmap::AdaptBitCount(Bitmap& rNew) const
}
case 4:
{
- if(HasGreyPaletteAny())
- {
- rNew.Convert(BmpConversion::N4BitGreys);
- }
- else
- {
- rNew.Convert(BmpConversion::N4BitColors);
- }
+ assert(false);
break;
}
case 8:
diff --git a/vcl/source/bitmap/bitmappaint.cxx b/vcl/source/bitmap/bitmappaint.cxx
index 6bc60687c164..6acf00fe0cac 100644
--- a/vcl/source/bitmap/bitmappaint.cxx
+++ b/vcl/source/bitmap/bitmappaint.cxx
@@ -933,7 +933,7 @@ 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 (GetBitCount() == 1)
- Convert(BmpConversion::N4BitColors);
+ Convert(BmpConversion::N8BitColors);
BitmapScopedWriteAccess pAcc(*this);
bool bRet = false;
@@ -996,7 +996,7 @@ bool Bitmap::Replace(const Color* pSearchColors, const Color* pReplaceColors, si
// Bitmaps with 1 bit color depth can cause problems if they have other entries than black/white
// in their palette
if (GetBitCount() == 1)
- Convert(BmpConversion::N4BitColors);
+ Convert(BmpConversion::N8BitColors);
BitmapScopedWriteAccess pAcc(*this);
bool bRet = false;
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 365204314733..2142aeac8808 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -9126,12 +9126,9 @@ const BitmapEmit& PDFWriterImpl::createBitmapEmit( const BitmapEx& i_rBitmap, co
BitmapEx aBitmap( i_rBitmap );
if( m_aContext.ColorMode == PDFWriter::DrawGreyscale )
{
- BmpConversion eConv = BmpConversion::N8BitGreys;
int nDepth = aBitmap.GetBitmap().GetBitCount();
- if( nDepth <= 4 )
- eConv = BmpConversion::N4BitGreys;
if( nDepth > 1 )
- aBitmap.Convert( eConv );
+ aBitmap.Convert( BmpConversion::N8BitGreys );
}
BitmapID aID;
aID.m_aPixelSize = aBitmap.GetSizePixel();
diff --git a/vcl/source/gdi/pdfwriter_impl2.cxx b/vcl/source/gdi/pdfwriter_impl2.cxx
index 862717adfd4e..1aacbce99934 100644
--- a/vcl/source/gdi/pdfwriter_impl2.cxx
+++ b/vcl/source/gdi/pdfwriter_impl2.cxx
@@ -163,12 +163,9 @@ void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSiz
if( m_aContext.ColorMode == PDFWriter::DrawGreyscale )
{
- BmpConversion eConv = BmpConversion::N8BitGreys;
int nDepth = aBitmapEx.GetBitmap().GetBitCount();
- if( nDepth <= 4 )
- eConv = BmpConversion::N4BitGreys;
if( nDepth > 1 )
- aBitmapEx.Convert( eConv );
+ aBitmapEx.Convert( BmpConversion::N8BitGreys );
}
bool bUseJPGCompression = !i_rContext.m_bOnlyLosslessCompression;
if ( bIsPng || ( aSizePixel.Width() < 32 ) || ( aSizePixel.Height() < 32 ) )
diff --git a/vcl/source/helper/canvastools.cxx b/vcl/source/helper/canvastools.cxx
index 8e837ac069e8..fef5500a8227 100644
--- a/vcl/source/helper/canvastools.cxx
+++ b/vcl/source/helper/canvastools.cxx
@@ -267,7 +267,6 @@ namespace vcl::unotools
// normalize bitcount
auto ePixelFormat =
( nDepth <= 1 ) ? vcl::PixelFormat::N1_BPP :
- ( nDepth <= 4 ) ? vcl::PixelFormat::N4_BPP :
( nDepth <= 8 ) ? vcl::PixelFormat::N8_BPP :
vcl::PixelFormat::N24_BPP;
auto eAlphaPixelFormat =