diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:54:39 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:54:39 +0000 |
commit | 267c6f2ac71f92999e969232431ba04678e7437e (patch) | |
tree | 358c9467650e1d0a1d7227a21dac2e3d08b622b2 /vcl/qa/cppunit/png | |
parent | Initial commit. (diff) | |
download | libreoffice-267c6f2ac71f92999e969232431ba04678e7437e.tar.xz libreoffice-267c6f2ac71f92999e969232431ba04678e7437e.zip |
Adding upstream version 4:24.2.0.upstream/4%24.2.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vcl/qa/cppunit/png')
181 files changed, 2084 insertions, 0 deletions
diff --git a/vcl/qa/cppunit/png/PngFilterTest.cxx b/vcl/qa/cppunit/png/PngFilterTest.cxx new file mode 100644 index 0000000000..2e900ec41d --- /dev/null +++ b/vcl/qa/cppunit/png/PngFilterTest.cxx @@ -0,0 +1,2084 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <sal/config.h> + +#include <string_view> + +#include <test/bootstrapfixture.hxx> +#include <tools/stream.hxx> +#include <vcl/filter/PngImageReader.hxx> +#include <vcl/filter/PngImageWriter.hxx> +#include <vcl/BitmapReadAccess.hxx> +#include <vcl/BitmapMonochromeFilter.hxx> +#include <vcl/BitmapWriteAccess.hxx> +#include <vcl/alpha.hxx> +#include <vcl/graphicfilter.hxx> +#include <unotools/tempfile.hxx> + +using namespace css; + +namespace +{ +struct Case +{ + tools::Long mnWidth; + tools::Long mnHeight; + sal_uInt16 mnBpp; + bool mbHasPalette; + bool mbIsAlpha; +}; +// Checks that a pngs BitmapEx is the same after reading and +// after writing. Takes a vector of function pointers if there's need to test +// special cases +void checkImportExportPng(const OUString& sFilePath, const Case& aCase) +{ + SvFileStream aFileStream(sFilePath, StreamMode::READ); + SvMemoryStream aExportStream; + BitmapEx aImportedBitmapEx; + BitmapEx aExportedImportedBitmapEx; + + bool bOpenOk = !aFileStream.GetError() && aFileStream.GetBufferSize() > 0; + CPPUNIT_ASSERT_MESSAGE(OString("Failed to open file: " + sFilePath.toUtf8()).getStr(), bOpenOk); + + // Read the png from the file + { + vcl::PngImageReader aPngReader(aFileStream); + bool bReadOk = aPngReader.read(aImportedBitmapEx); + CPPUNIT_ASSERT_MESSAGE(OString("Failed to read png from: " + sFilePath.toUtf8()).getStr(), + bReadOk); + Bitmap aImportedBitmap = aImportedBitmapEx.GetBitmap(); + BitmapScopedInfoAccess pAccess(aImportedBitmap); + auto nActualWidth = aImportedBitmapEx.GetSizePixel().Width(); + auto nActualHeight = aImportedBitmapEx.GetSizePixel().Height(); + auto nActualBpp = vcl::pixelFormatBitCount(aImportedBitmapEx.GetBitmap().getPixelFormat()); + auto bActualHasPalette = pAccess->HasPalette(); + auto bActualIsAlpha = aImportedBitmapEx.IsAlpha(); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("Width comparison failed for exported png:" + sFilePath.toUtf8()).getStr(), + aCase.mnWidth, nActualWidth); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("Height comparison failed for exported png:" + sFilePath.toUtf8()).getStr(), + aCase.mnHeight, nActualHeight); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("Bpp comparison failed for exported png:" + sFilePath.toUtf8()).getStr(), + aCase.mnBpp, nActualBpp); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("HasPalette comparison failed for exported png:" + sFilePath.toUtf8()).getStr(), + aCase.mbHasPalette, bActualHasPalette); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("IsAlpha comparison failed for exported png:" + sFilePath.toUtf8()).getStr(), + aCase.mbIsAlpha, bActualIsAlpha); + } + + // Write the imported png to a stream + { + vcl::PngImageWriter aPngWriter(aExportStream); + bool bWriteOk = aPngWriter.write(aImportedBitmapEx); + CPPUNIT_ASSERT_MESSAGE(OString("Failed to write png: " + sFilePath.toUtf8()).getStr(), + bWriteOk); + aExportStream.Seek(0); + } + + // Read the png again from the exported stream + { + vcl::PngImageReader aPngReader(aExportStream); + bool bReadOk = aPngReader.read(aExportedImportedBitmapEx); + CPPUNIT_ASSERT_MESSAGE( + OString("Failed to read exported png: " + sFilePath.toUtf8()).getStr(), bReadOk); + Bitmap aExportedImportedBitmap = aExportedImportedBitmapEx.GetBitmap(); + BitmapScopedInfoAccess pAccess(aExportedImportedBitmap); + auto nActualWidth = aExportedImportedBitmapEx.GetSizePixel().Width(); + auto nActualHeight = aExportedImportedBitmapEx.GetSizePixel().Height(); + auto nActualBpp + = vcl::pixelFormatBitCount(aExportedImportedBitmapEx.GetBitmap().getPixelFormat()); + auto bActualHasPalette = pAccess->HasPalette(); + auto bActualIsAlpha = aExportedImportedBitmapEx.IsAlpha(); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("Width comparison failed for exported png:" + sFilePath.toUtf8()).getStr(), + aCase.mnWidth, nActualWidth); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("Height comparison failed for exported png:" + sFilePath.toUtf8()).getStr(), + aCase.mnHeight, nActualHeight); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("Bpp comparison failed for exported png:" + sFilePath.toUtf8()).getStr(), + aCase.mnBpp, nActualBpp); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("HasPalette comparison failed for exported png:" + sFilePath.toUtf8()).getStr(), + aCase.mbHasPalette, bActualHasPalette); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("IsAlpha comparison failed for exported png:" + sFilePath.toUtf8()).getStr(), + aCase.mbIsAlpha, bActualIsAlpha); + } + + // Compare imported and exported BitmapEx + // This compares size, inner bitmap and alpha mask + bool bIsSame = (aExportedImportedBitmapEx == aImportedBitmapEx); + CPPUNIT_ASSERT_MESSAGE( + OString("Import->Export png test failed for png: " + sFilePath.toUtf8()).getStr(), bIsSame); +} + +// Checks that aPngReader.read returns false on corrupted files +void checkImportCorruptedPng(const OUString& sFilePath) +{ + SvFileStream aFileStream(sFilePath, StreamMode::READ); + BitmapEx aImportedBitmapEx; + + bool bOpenOk = !aFileStream.GetError() && aFileStream.GetBufferSize() > 0; + CPPUNIT_ASSERT_MESSAGE(OString("Failed to open file: " + sFilePath.toUtf8()).getStr(), bOpenOk); + vcl::PngImageReader aPngReader(aFileStream); + bool bReadOk = aPngReader.read(aImportedBitmapEx); + // Make sure this file was not read successfully + CPPUNIT_ASSERT_MESSAGE( + OString("Corrupted png should not be opened: " + sFilePath.toUtf8()).getStr(), !bReadOk); +} +} + +class PngFilterTest : public test::BootstrapFixture +{ + // Should keep the temp files (should be false) + static constexpr bool bKeepTemp = true; + + OUString maDataUrl; + + OUString getFullUrl(std::u16string_view sFileName) + { + return m_directories.getURLFromSrc(maDataUrl) + sFileName; + } + +public: + PngFilterTest() + : BootstrapFixture(true, false) + , maDataUrl("/vcl/qa/cppunit/png/data/") + { + } + + void testPng(); + void testApng(); + void testPngSuite(); + void testMsGifInPng(); + void testPngRoundtrip8BitGrey(); + void testPngRoundtrip24(); + void testPngRoundtrip24_8(); + void testPngRoundtrip32(); + void testPngWrite8BitRGBPalette(); + void testTdf153180MonochromeFilterPngExport(); + void testDump(); + + CPPUNIT_TEST_SUITE(PngFilterTest); + CPPUNIT_TEST(testPng); + CPPUNIT_TEST(testApng); + CPPUNIT_TEST(testPngSuite); + CPPUNIT_TEST(testMsGifInPng); + CPPUNIT_TEST(testPngRoundtrip8BitGrey); + CPPUNIT_TEST(testPngRoundtrip24); + CPPUNIT_TEST(testPngRoundtrip24_8); + CPPUNIT_TEST(testPngRoundtrip32); + CPPUNIT_TEST(testPngWrite8BitRGBPalette); + CPPUNIT_TEST(testDump); + CPPUNIT_TEST(testTdf153180MonochromeFilterPngExport); + CPPUNIT_TEST_SUITE_END(); +}; + +void PngFilterTest::testPng() +{ + for (const OUString& aFileName : { OUString("rect-1bit-pal.png") }) + { + SvFileStream aFileStream(getFullUrl(aFileName), StreamMode::READ); + + vcl::PngImageReader aPngReader(aFileStream); + BitmapEx aBitmapEx; + aPngReader.read(aBitmapEx); + + Bitmap aBitmap = aBitmapEx.GetBitmap(); + { + BitmapScopedReadAccess pAccess(aBitmap); + CPPUNIT_ASSERT_EQUAL(tools::Long(4), pAccess->Width()); + CPPUNIT_ASSERT_EQUAL(tools::Long(4), pAccess->Height()); + + if (pAccess->GetBitCount() == 24 || pAccess->GetBitCount() == 32) + { + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x00), + pAccess->GetPixel(0, 0)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x00), + pAccess->GetPixel(3, 3)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x00), + pAccess->GetPixel(3, 0)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x00), + pAccess->GetPixel(0, 3)); + + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0x00, 0x00), + pAccess->GetPixel(1, 1)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0x00, 0x00), + pAccess->GetPixel(1, 2)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0x00, 0x00), + pAccess->GetPixel(2, 1)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0x00, 0x00), + pAccess->GetPixel(2, 2)); + } + else + { + CPPUNIT_ASSERT_MESSAGE("Bitmap is not 24 or 32 bit.", false); + } + } + } + + OUString aFilenames[] = { + OUString("color-rect-8bit-RGB.png"), + OUString("color-rect-8bit-RGB-interlaced.png"), + OUString("color-rect-4bit-pal.png"), + }; + + for (const OUString& aFileName : aFilenames) + { + SvFileStream aFileStream(getFullUrl(aFileName), StreamMode::READ); + + vcl::PngImageReader aPngReader(aFileStream); + BitmapEx aBitmapEx; + aPngReader.read(aBitmapEx); + + Bitmap aBitmap = aBitmapEx.GetBitmap(); + { + BitmapScopedReadAccess pAccess(aBitmap); + CPPUNIT_ASSERT_EQUAL(tools::Long(4), pAccess->Width()); + CPPUNIT_ASSERT_EQUAL(tools::Long(4), pAccess->Height()); + if (pAccess->GetBitCount() == 24 || pAccess->GetBitCount() == 32) + { + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x00), + pAccess->GetPixel(0, 0)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x00), + pAccess->GetPixel(3, 3)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x00), + pAccess->GetPixel(3, 0)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x00), + pAccess->GetPixel(0, 3)); + + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0x00, 0x00, 0x00), + pAccess->GetPixel(1, 1)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0xFF, 0x00, 0x00), + pAccess->GetPixel(1, 2)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0xFF, 0x00), + pAccess->GetPixel(2, 1)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0x00, 0x00), + pAccess->GetPixel(2, 2)); + } + else + { + CPPUNIT_ASSERT_MESSAGE("Bitmap is not 24 or 32 bit.", false); + } + } + } + for (const OUString& aFileName : { OUString("alpha-rect-8bit-RGBA.png") }) + { + SvFileStream aFileStream(getFullUrl(aFileName), StreamMode::READ); + + vcl::PngImageReader aPngReader(aFileStream); + BitmapEx aBitmapEx; + aPngReader.read(aBitmapEx); + + Bitmap aBitmap = aBitmapEx.GetBitmap(); + { + BitmapScopedReadAccess pAccess(aBitmap); + CPPUNIT_ASSERT_EQUAL(tools::Long(4), pAccess->Width()); + CPPUNIT_ASSERT_EQUAL(tools::Long(4), pAccess->Height()); + + if (pAccess->GetBitCount() == 24) + { + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x00), + pAccess->GetPixel(0, 0)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x00), + pAccess->GetPixel(3, 3)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x00), + pAccess->GetPixel(3, 0)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x00), + pAccess->GetPixel(0, 3)); + + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0x00, 0x00, 0x00), + pAccess->GetPixel(1, 1)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0xFF, 0x00, 0x00), + pAccess->GetPixel(1, 2)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0xFF, 0x00), + pAccess->GetPixel(2, 1)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0x00, 0x00), + pAccess->GetPixel(2, 2)); + + AlphaMask aAlpha = aBitmapEx.GetAlphaMask(); + { + BitmapScopedReadAccess pAlphaAccess(aAlpha); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(8), pAlphaAccess->GetBitCount()); + CPPUNIT_ASSERT_EQUAL(tools::Long(4), pAlphaAccess->Width()); + CPPUNIT_ASSERT_EQUAL(tools::Long(4), pAlphaAccess->Height()); + + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0x7F, 0x00), + pAlphaAccess->GetPixel(0, 0)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0x7F, 0x00), + pAlphaAccess->GetPixel(3, 3)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0x7F, 0x00), + pAlphaAccess->GetPixel(3, 0)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0x7F, 0x00), + pAlphaAccess->GetPixel(0, 3)); + + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0xBF, 0x00), + pAlphaAccess->GetPixel(1, 1)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0x3F, 0x00), + pAlphaAccess->GetPixel(1, 2)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0x3F, 0x00), + pAlphaAccess->GetPixel(2, 1)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0xBF, 0x00), + pAlphaAccess->GetPixel(2, 2)); + } + } + else if (pAccess->GetBitCount() == 32) + { + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x80), + pAccess->GetPixel(0, 0)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x80), + pAccess->GetPixel(3, 3)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x80), + pAccess->GetPixel(3, 0)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0xFF, 0x80), + pAccess->GetPixel(0, 3)); + + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0x00, 0x00, 0x40), + pAccess->GetPixel(1, 1)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0xFF, 0x00, 0xC0), + pAccess->GetPixel(1, 2)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0x00, 0x00, 0xFF, 0xC0), + pAccess->GetPixel(2, 1)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(ColorTransparency, 0xFF, 0xFF, 0x00, 0x40), + pAccess->GetPixel(2, 2)); + } + else + { + CPPUNIT_ASSERT_MESSAGE("Bitmap is not 24 or 32 bit.", false); + } + } + } +} + +void PngFilterTest::testApng() +{ + SvFileStream aFileStream(getFullUrl(u"apng_simple.apng"), StreamMode::READ); + vcl::PngImageReader aPngReader(aFileStream); + Graphic aGraphic; + bool bSuccess = aPngReader.read(aGraphic); + CPPUNIT_ASSERT(bSuccess); + CPPUNIT_ASSERT(aGraphic.IsAnimated()); + CPPUNIT_ASSERT_EQUAL(size_t(2), aGraphic.GetAnimation().GetAnimationFrames().size()); + + AnimationFrame aFrame1 = *aGraphic.GetAnimation().GetAnimationFrames()[0]; + AnimationFrame aFrame2 = *aGraphic.GetAnimation().GetAnimationFrames()[1]; + + CPPUNIT_ASSERT_EQUAL(COL_WHITE, aFrame1.maBitmapEx.GetPixelColor(0, 0)); + CPPUNIT_ASSERT_EQUAL(Color(0x72d1c8), aFrame1.maBitmapEx.GetPixelColor(2, 2)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aFrame2.maBitmapEx.GetPixelColor(0, 0)); + + // Roundtrip the APNG + SvMemoryStream aOutStream; + vcl::PngImageWriter aPngWriter(aOutStream); + bSuccess = aPngWriter.write(aGraphic); + CPPUNIT_ASSERT(bSuccess); + + aOutStream.Seek(STREAM_SEEK_TO_BEGIN); + vcl::PngImageReader aPngReader2(aOutStream); + Graphic aGraphic2; + bSuccess = aPngReader2.read(aGraphic2); + CPPUNIT_ASSERT(bSuccess); + CPPUNIT_ASSERT(aGraphic2.IsAnimated()); + CPPUNIT_ASSERT_EQUAL(size_t(2), aGraphic2.GetAnimation().GetAnimationFrames().size()); + + AnimationFrame aFrame1Roundtripped = *aGraphic2.GetAnimation().GetAnimationFrames()[0]; + AnimationFrame aFrame2Roundtripped = *aGraphic2.GetAnimation().GetAnimationFrames()[1]; + + CPPUNIT_ASSERT_EQUAL(COL_WHITE, aFrame1Roundtripped.maBitmapEx.GetPixelColor(0, 0)); + CPPUNIT_ASSERT_EQUAL(Color(0x72d1c8), aFrame1Roundtripped.maBitmapEx.GetPixelColor(2, 2)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aFrame2Roundtripped.maBitmapEx.GetPixelColor(0, 0)); + + // Make sure the two frames have the same properties + CPPUNIT_ASSERT_EQUAL(aFrame1.maPositionPixel, aFrame1Roundtripped.maPositionPixel); + CPPUNIT_ASSERT_EQUAL(aFrame1.maSizePixel, aFrame1Roundtripped.maSizePixel); + CPPUNIT_ASSERT_EQUAL(aFrame1.mnWait, aFrame1Roundtripped.mnWait); + CPPUNIT_ASSERT_EQUAL(aFrame1.meDisposal, aFrame1Roundtripped.meDisposal); + CPPUNIT_ASSERT_EQUAL(aFrame1.meBlend, aFrame1Roundtripped.meBlend); + + CPPUNIT_ASSERT_EQUAL(aFrame2.maPositionPixel, aFrame2Roundtripped.maPositionPixel); + CPPUNIT_ASSERT_EQUAL(aFrame2.maSizePixel, aFrame2Roundtripped.maSizePixel); + CPPUNIT_ASSERT_EQUAL(aFrame2.mnWait, aFrame2Roundtripped.mnWait); + CPPUNIT_ASSERT_EQUAL(aFrame2.meDisposal, aFrame2Roundtripped.meDisposal); + CPPUNIT_ASSERT_EQUAL(aFrame2.meBlend, aFrame2Roundtripped.meBlend); +} + +void PngFilterTest::testPngSuite() +{ + // Test the PngSuite test files by Willem van Schaik + // filename: g04i2c08.png + // || |||| + // test feature (in this case gamma) ------+| |||| + // parameter of test (here gamma-value) ----+ |||| + // interlaced or non-interlaced --------------+||| + // color-type (numerical) ---------------------+|| + // color-type (descriptive) --------------------+| + // bit-depth ------------------------------------+ + + // Some notes about the cases: + // - RGB palette PNGs get converted to a bitmap with png_set_palette_to_rgb + // - Grayscale PNGs with alpha also do with png_set_gray_to_rgb + // - Grayscale PNGs without alpha use BitmapEx palette utilities + // - 1, 2, 4 bit grayscale w/o alpha gets converted to 8 bit with png_set_expand_gray_1_2_4_to_8 + // - 16 bit per channel gets converted to 8 bit per channel with png_set_scale_16 + // - PNGs that are not size related have size 32x32 + // - Internally BitmapEx is never 32 bpp, instead it's 24 bpp (rgb) and uses an 8 bpp alpha mask + std::pair<std::u16string_view, Case> aCases[] = { + // Basic formats, not interlaced + { u"basn0g01.png", + { + 32, + 32, + 8, + true, + false, + } }, // b&w + { u"basn0g02.png", + { + 32, + 32, + 8, + true, + false, + } }, // 2 bit grayscale + { u"basn0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // 4 bit grayscale + { u"basn0g08.png", + { + 32, + 32, + 8, + true, + false, + } }, // 8 bit grayscale + { u"basn0g16.png", + { + 32, + 32, + 8, + true, + false, + } }, // 16 bit grayscale + { u"basn2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // 8 bit rgb + { u"basn2c16.png", + { + 32, + 32, + 24, + false, + false, + } }, // 16 bit rgb + { u"basn3p01.png", + { + 32, + 32, + 24, + false, + false, + } }, // 1 bit palette + { u"basn3p02.png", + { + 32, + 32, + 24, + false, + false, + } }, // 2 bit palette + { u"basn3p04.png", + { + 32, + 32, + 24, + false, + false, + } }, // 4 bit palette + { u"basn3p08.png", + { + 32, + 32, + 24, + false, + false, + } }, // 8 bit palette + { u"basn4a08.png", + { + 32, + 32, + 24, + false, + true, + } }, // 8 bit grayscale + 8 bit alpha + { u"basn4a16.png", + { + 32, + 32, + 24, + false, + true, + } }, // 16 bit grayscale + 16 bit alpha + { u"basn6a08.png", + { + 32, + 32, + 24, + false, + true, + } }, // 8 bit rgba + { u"basn6a16.png", + { + 32, + 32, + 24, + false, + true, + } }, // 16 bit rgba + // Basic formats, interlaced + { u"basi0g01.png", + { + 32, + 32, + 8, + true, + false, + } }, // b&w + { u"basi0g02.png", + { + 32, + 32, + 8, + true, + false, + } }, // 2 bit grayscale + { u"basi0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // 4 bit grayscale + { u"basi0g08.png", + { + 32, + 32, + 8, + true, + false, + } }, // 8 bit grayscale + { u"basi0g16.png", + { + 32, + 32, + 8, + true, + false, + } }, // 16 bit grayscale + { u"basi2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // 8 bit rgb + { u"basi2c16.png", + { + 32, + 32, + 24, + false, + false, + } }, // 16 bit rgb + { u"basi3p01.png", + { + 32, + 32, + 24, + false, + false, + } }, // 1 bit palette + { u"basi3p02.png", + { + 32, + 32, + 24, + false, + false, + } }, // 2 bit palette + { u"basi3p04.png", + { + 32, + 32, + 24, + false, + false, + } }, // 4 bit palette + { u"basi3p08.png", + { + 32, + 32, + 24, + false, + false, + } }, // 8 bit palette + { u"basi4a08.png", + { + 32, + 32, + 24, + false, + true, + } }, // 8 bit grayscale + 8 bit alpha + { u"basi4a16.png", + { + 32, + 32, + 24, + false, + true, + } }, // 16 bit grayscale + 16 bit alpha + { u"basi6a08.png", + { + 32, + 32, + 24, + false, + true, + } }, // 8 bit rgba + { u"basi6a16.png", + { + 32, + 32, + 24, + false, + true, + } }, // 16 bit rgba + // // Odd sizes, not interlaced + { u"s01n3p01.png", + { + 1, + 1, + 24, + false, + false, + } }, // 1x1 + { u"s02n3p01.png", + { + 2, + 2, + 24, + false, + false, + } }, // 2x2 + { u"s03n3p01.png", + { + 3, + 3, + 24, + false, + false, + } }, // 3x3 + { u"s04n3p01.png", + { + 4, + 4, + 24, + false, + false, + } }, // 4x4 + { u"s05n3p02.png", + { + 5, + 5, + 24, + false, + false, + } }, // 5x5 + { u"s06n3p02.png", + { + 6, + 6, + 24, + false, + false, + } }, // 6x6 + { u"s07n3p02.png", + { + 7, + 7, + 24, + false, + false, + } }, // 7x7 + { u"s08n3p02.png", + { + 8, + 8, + 24, + false, + false, + } }, // 8x8 + { u"s09n3p02.png", + { + 9, + 9, + 24, + false, + false, + } }, // 9x9 + { u"s32n3p04.png", + { + 32, + 32, + 24, + false, + false, + } }, // 32x32 + { u"s33n3p04.png", + { + 33, + 33, + 24, + false, + false, + } }, // 33x33 + { u"s34n3p04.png", + { + 34, + 34, + 24, + false, + false, + } }, // 34x34 + { u"s35n3p04.png", + { + 35, + 35, + 24, + false, + false, + } }, // 35x35 + { u"s36n3p04.png", + { + 36, + 36, + 24, + false, + false, + } }, // 36x36 + { u"s37n3p04.png", + { + 37, + 37, + 24, + false, + false, + } }, // 37x37 + { u"s38n3p04.png", + { + 38, + 38, + 24, + false, + false, + } }, // 38x38 + { u"s39n3p04.png", + { + 39, + 39, + 24, + false, + false, + } }, // 39x39 + { u"s40n3p04.png", + { + 40, + 40, + 24, + false, + false, + } }, // 40x40 + // // Odd sizes, interlaced + { u"s01i3p01.png", + { + 1, + 1, + 24, + false, + false, + } }, // 1x1 + { u"s02i3p01.png", + { + 2, + 2, + 24, + false, + false, + } }, // 2x2 + { u"s03i3p01.png", + { + 3, + 3, + 24, + false, + false, + } }, // 3x3 + { u"s04i3p01.png", + { + 4, + 4, + 24, + false, + false, + } }, // 4x4 + { u"s05i3p02.png", + { + 5, + 5, + 24, + false, + false, + } }, // 5x5 + { u"s06i3p02.png", + { + 6, + 6, + 24, + false, + false, + } }, // 6x6 + { u"s07i3p02.png", + { + 7, + 7, + 24, + false, + false, + } }, // 7x7 + { u"s08i3p02.png", + { + 8, + 8, + 24, + false, + false, + } }, // 8x8 + { u"s09i3p02.png", + { + 9, + 9, + 24, + false, + false, + } }, // 9x9 + { u"s32i3p04.png", + { + 32, + 32, + 24, + false, + false, + } }, // 32x32 + { u"s33i3p04.png", + { + 33, + 33, + 24, + false, + false, + } }, // 33x33 + { u"s34i3p04.png", + { + 34, + 34, + 24, + false, + false, + } }, // 34x34 + { u"s35i3p04.png", + { + 35, + 35, + 24, + false, + false, + } }, // 35x35 + { u"s36i3p04.png", + { + 36, + 36, + 24, + false, + false, + } }, // 36x36 + { u"s37i3p04.png", + { + 37, + 37, + 24, + false, + false, + } }, // 37x37 + { u"s38i3p04.png", + { + 38, + 38, + 24, + false, + false, + } }, // 38x38 + { u"s39i3p04.png", + { + 39, + 39, + 24, + false, + false, + } }, // 39x39 + { u"s40i3p04.png", + { + 40, + 40, + 24, + false, + false, + } }, // 40x40 + // Background colors + { u"bgai4a08.png", + { + 32, + 32, + 24, + false, + true, + } }, // 8 bit grayscale alpha no background chunk, interlaced + { u"bgai4a16.png", + { + 32, + 32, + 24, + false, + true, + } }, // 16 bit grayscale alpha no background chunk, interlaced + { u"bgan6a08.png", + { + 32, + 32, + 24, + false, + true, + } }, // 3 * 8 bits rgb color alpha, no background chunk + { u"bgan6a16.png", + { + 32, + 32, + 24, + false, + true, + } }, // 3 * 16 bits rgb color alpha, no background chunk + { u"bgbn4a08.png", + { + 32, + 32, + 24, + false, + true, + } }, // 8 bit grayscale alpha, black background chunk + { u"bggn4a16.png", + { + 32, + 32, + 24, + false, + true, + } }, // 16 bit grayscale alpha, gray background chunk + { u"bgwn6a08.png", + { + 32, + 32, + 24, + false, + true, + } }, // 3 * 8 bits rgb color alpha, white background chunk + { u"bgyn6a16.png", + { + 32, + 32, + 24, + false, + true, + } }, // 3 * 16 bits rgb color alpha, yellow background chunk + // Transparency + { u"tbbn0g04.png", + { + 32, + 32, + 24, + false, + true, + } }, // transparent, black background chunk + { u"tbbn2c16.png", + { + 32, + 32, + 24, + false, + true, + } }, // transparent, blue background chunk + { u"tbbn3p08.png", + { + 32, + 32, + 24, + false, + true, + } }, // transparent, black background chunk + { u"tbgn2c16.png", + { + 32, + 32, + 24, + false, + true, + } }, // transparent, green background chunk + { u"tbgn3p08.png", + { + 32, + 32, + 24, + false, + true, + } }, // transparent, light-gray background chunk + { u"tbrn2c08.png", + { + 32, + 32, + 24, + false, + true, + } }, // transparent, red background chunk + { u"tbwn0g16.png", + { + 32, + 32, + 24, + false, + true, + } }, // transparent, white background chunk + { u"tbwn3p08.png", + { + 32, + 32, + 24, + false, + true, + } }, // transparent, white background chunk + { u"tbyn3p08.png", + { + 32, + 32, + 24, + false, + true, + } }, // transparent, yellow background chunk + { u"tp1n3p08.png", + { + 32, + 32, + 24, + false, + true, + } }, // transparent, but no background chunk + { u"tm3n3p02.png", + { + 32, + 32, + 24, + false, + true, + } }, // multiple levels of transparency, 3 entries + // Gamma + { u"g03n0g16.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale, file-gamma = 0.35 + { u"g03n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color, file-gamma = 0.35 + { u"g03n3p04.png", + { + 32, + 32, + 24, + false, + false, + } }, // paletted, file-gamma = 0.35 + { u"g04n0g16.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale, file-gamma = 0.45 + { u"g04n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color, file-gamma = 0.45 + { u"g04n3p04.png", + { + 32, + 32, + 24, + false, + false, + } }, // paletted, file-gamma = 0.45 + { u"g05n0g16.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale, file-gamma = 0.55 + { u"g05n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color, file-gamma = 0.55 + { u"g05n3p04.png", + { + 32, + 32, + 24, + false, + false, + } }, // paletted, file-gamma = 0.55 + { u"g07n0g16.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale, file-gamma = 0.70 + { u"g07n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color, file-gamma = 0.70 + { u"g07n3p04.png", + { + 32, + 32, + 24, + false, + false, + } }, // paletted, file-gamma = 0.70 + { u"g10n0g16.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale, file-gamma = 1.00 + { u"g10n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color, file-gamma = 1.00 + { u"g10n3p04.png", + { + 32, + 32, + 24, + false, + false, + } }, // paletted, file-gamma = 1.00 + { u"g25n0g16.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale, file-gamma = 2.50 + { u"g25n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color, file-gamma = 2.50 + { u"g25n3p04.png", + { + 32, + 32, + 24, + false, + false, + } }, // paletted, file-gamma = 2.50 + // Image filtering + { u"f00n0g08.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale no interlacing, filter-type 0 + { u"f00n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color no interlacing, filter-type 0 + { u"f01n0g08.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale no interlacing, filter-type 1 + { u"f01n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color no interlacing, filter-type 1 + { u"f02n0g08.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale no interlacing, filter-type 2 + { u"f02n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color no interlacing, filter-type 2 + { u"f03n0g08.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale no interlacing, filter-type 3 + { u"f03n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color no interlacing, filter-type 3 + { u"f04n0g08.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale no interlacing, filter-type 4 + { u"f04n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color no interlacing, filter-type 4 + { u"f99n0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale bit-depth 4, filter changing per scanline + // Additional palettes + { u"pp0n2c16.png", + { + 32, + 32, + 24, + false, + false, + } }, // six-cube palette-chunk in true-color image + { u"pp0n6a08.png", + { + 32, + 32, + 24, + false, + true, + } }, // six-cube palette-chunk in true-color+alpha image + { u"ps1n0g08.png", + { + 32, + 32, + 8, + true, + false, + } }, // six-cube suggested palette (1 byte) in grayscale image + { u"ps1n2c16.png", + { + 32, + 32, + 24, + false, + false, + } }, // six-cube suggested palette (1 byte) in true-color image + { u"ps2n0g08.png", + { + 32, + 32, + 8, + true, + false, + } }, // six-cube suggested palette (2 bytes) in grayscale image + { u"ps2n2c16.png", + { + 32, + 32, + 24, + false, + false, + } }, // six-cube suggested palette (2 bytes) in true-color image + // Ancillary chunks + { u"ccwn2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // chroma chunk w:0.31270.329 r:0.640.33 g:0.300.60 b:0.15,0.06 + { u"ccwn3p08.png", + { + 32, + 32, + 24, + false, + false, + } }, // chroma chunk w:0.31270.329 r:0.640.33 g:0.300.60 b:0.15,0.06 + { u"cdfn2c08.png", + { + 8, + 32, + 24, + false, + false, + } }, // physical pixel dimensions, 8x32 flat pixels + { u"cdhn2c08.png", + { + 32, + 8, + 24, + false, + false, + } }, // physical pixel dimensions, 32x8 high pixels + { u"cdsn2c08.png", + { + 8, + 8, + 24, + false, + false, + } }, // physical pixel dimensions, 8x8 square pixels + { u"cdun2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // physical pixel dimensions, 1000 pixels per 1 meter + { u"ch1n3p04.png", + { + 32, + 32, + 24, + false, + false, + } }, // histogram 15 colors + { u"ch2n3p08.png", + { + 32, + 32, + 24, + false, + false, + } }, // histogram 256 colors + { u"cm0n0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale modification time, 01-jan-2000 12:34:56 + { u"cm7n0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale modification time, 01-jan-1970 00:00:00 + { u"cm9n0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale modification time, 31-dec-1999 23:59:59 + { u"cs3n2c16.png", + { + 32, + 32, + 24, + false, + false, + } }, // color, 13 significant bits + { u"cs3n3p08.png", + { + 32, + 32, + 24, + false, + false, + } }, // paletted, 3 significant bits + { u"cs5n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color, 5 significant bits + { u"cs5n3p08.png", + { + 32, + 32, + 24, + false, + false, + } }, // paletted, 5 significant bits + { u"cs8n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color, 8 significant bits (reference) + { u"cs8n3p08.png", + { + 32, + 32, + 24, + false, + false, + } }, // paletted, 8 significant bits (reference) + { u"ct0n0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale no textual data + { u"ct1n0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale with textual data + { u"ctzn0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale with compressed textual data + { u"cten0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale international UTF-8, english + { u"ctfn0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale international UTF-8, finnish + { u"ctgn0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale international UTF-8, greek + { u"cthn0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale international UTF-8, hindi + { u"ctjn0g04.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale international UTF-8, japanese + { u"exif2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // chunk with jpeg exif data + // Chunk ordering + { u"oi1n0g16.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale mother image with 1 idat-chunk + { u"oi1n2c16.png", + { + 32, + 32, + 24, + false, + false, + } }, // color mother image with 1 idat-chunk + { u"oi2n0g16.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale image with 2 idat-chunks + { u"oi2n2c16.png", + { + 32, + 32, + 24, + false, + false, + } }, // color image with 2 idat-chunks + { u"oi4n0g16.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale image with 4 unequal sized idat-chunks + { u"oi4n2c16.png", + { + 32, + 32, + 24, + false, + false, + } }, // color image with 4 unequal sized idat-chunks + { u"oi9n0g16.png", + { + 32, + 32, + 8, + true, + false, + } }, // grayscale image with all idat-chunks length one + { u"oi9n2c16.png", + { + 32, + 32, + 24, + false, + false, + } }, // color image with all idat-chunks length one + // Zlib compression + { u"z00n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color no interlacing, compression level 0 (none) + { u"z03n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color no interlacing, compression level 3 + { u"z06n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color no interlacing, compression level 6 (default) + { u"z09n2c08.png", + { + 32, + 32, + 24, + false, + false, + } }, // color no interlacing, compression level 9 (maximum) + }; + + for (const auto & [ aCaseName, aCase ] : aCases) + { + checkImportExportPng(getFullUrl(aCaseName), aCase); + } + + OUString aCorruptedFilenames[] = { + "xs1n0g01.png", // signature byte 1 MSBit reset to zero + "xs2n0g01.png", // signature byte 2 is a 'Q' + "xs4n0g01.png", // signature byte 4 lowercase + "xs7n0g01.png", // 7th byte a space instead of control-Z + "xcrn0g04.png", // added cr bytes + "xlfn0g04.png", // added lf bytes + "xhdn0g08.png", // incorrect IHDR checksum + "xc1n0g08.png", // color type 1 + "xc9n2c08.png", // color type 9 + "xd0n2c08.png", // bit-depth 0 + "xd3n2c08.png", // bit-depth 3 + "xd9n2c08.png", // bit-depth 99 + "xdtn0g01.png", // missing IDAT chunk + "xcsn0g01.png", // incorrect IDAT checksum + }; + + for (const auto& aFilename : aCorruptedFilenames) + { + checkImportCorruptedPng(getFullUrl(aFilename)); + } +} + +void PngFilterTest::testMsGifInPng() +{ + GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter(); + { + Graphic aGraphic; + const OUString aURL(getFullUrl(u"ms-gif.png")); + SvFileStream aFileStream(aURL, StreamMode::READ); + ErrCode aResult = rFilter.ImportGraphic(aGraphic, aURL, aFileStream); + CPPUNIT_ASSERT_EQUAL(ERRCODE_NONE, aResult); + CPPUNIT_ASSERT(aGraphic.IsGfxLink()); + // The image is technically a PNG, but it has an animated Gif as a chunk (Microsoft extension). + CPPUNIT_ASSERT_EQUAL(GfxLinkType::NativeGif, aGraphic.GetSharedGfxLink()->GetType()); + CPPUNIT_ASSERT(aGraphic.IsAnimated()); + } + { + // Tests msOG chunk export support + const OUString aURL(getFullUrl(u"dummy.gif")); + SvFileStream aGIFStream(aURL, StreamMode::READ); + sal_uInt32 nGIFSize = aGIFStream.TellEnd(); + const char* const pHeader = "MSOFFICE9.0"; + auto nHeaderSize = strlen(pHeader); + uno::Sequence<sal_Int8> aGIFSequence(nHeaderSize + nGIFSize); + sal_Int8* pSequence = aGIFSequence.getArray(); + for (size_t i = 0; i < nHeaderSize; i++) + *pSequence++ = pHeader[i]; + aGIFStream.Seek(STREAM_SEEK_TO_BEGIN); + aGIFStream.ReadBytes(pSequence, nGIFSize); + // Create msOG chunk + beans::PropertyValue aChunkProperty, aFilterProperty; + aChunkProperty.Name = "msOG"; + aChunkProperty.Value <<= aGIFSequence; + uno::Sequence<beans::PropertyValue> aAdditionalChunkSequence{ aChunkProperty }; + aFilterProperty.Name = "AdditionalChunks"; + aFilterProperty.Value <<= aAdditionalChunkSequence; + uno::Sequence<beans::PropertyValue> aPNGParameters{ aFilterProperty }; + // Export the png with the chunk + utl::TempFileNamed aTempFile(u"testPngExportMsGif", true, u".png"); + if (!bKeepTemp) + aTempFile.EnableKillingFile(); + { + SvStream& rStream = *aTempFile.GetStream(StreamMode::WRITE); + BitmapEx aDummyBitmap(Size(8, 8), vcl::PixelFormat::N24_BPP); + vcl::PngImageWriter aPngWriter(rStream); + aPngWriter.setParameters(aPNGParameters); + bool bWriteSuccess = aPngWriter.write(aDummyBitmap); + CPPUNIT_ASSERT_EQUAL(true, bWriteSuccess); + aTempFile.CloseStream(); + } + { + SvStream& rStream = *aTempFile.GetStream(StreamMode::READ); + rStream.Seek(0); + // Import the png and check that it is a gif + Graphic aGraphic; + ErrCode aResult = rFilter.ImportGraphic(aGraphic, aTempFile.GetURL(), rStream); + CPPUNIT_ASSERT_EQUAL(ERRCODE_NONE, aResult); + CPPUNIT_ASSERT(aGraphic.IsGfxLink()); + CPPUNIT_ASSERT_EQUAL(GfxLinkType::NativeGif, aGraphic.GetSharedGfxLink()->GetType()); + CPPUNIT_ASSERT(aGraphic.IsAnimated()); + } + } +} + +void PngFilterTest::testPngRoundtrip8BitGrey() +{ + utl::TempFileNamed aTempFile(u"testPngRoundtrip8BitGrey"); + if (!bKeepTemp) + aTempFile.EnableKillingFile(); + { + SvStream& rStream = *aTempFile.GetStream(StreamMode::WRITE); + Bitmap aBitmap(Size(16, 16), vcl::PixelFormat::N8_BPP, &Bitmap::GetGreyPalette(256)); + { + BitmapScopedWriteAccess pWriteAccess(aBitmap); + pWriteAccess->Erase(COL_BLACK); + for (int i = 0; i < 8; ++i) + { + for (int j = 0; j < 8; ++j) + { + pWriteAccess->SetPixel(i, j, COL_GRAY); + } + } + for (int i = 8; i < 16; ++i) + { + for (int j = 8; j < 16; ++j) + { + pWriteAccess->SetPixel(i, j, COL_LIGHTGRAY); + } + } + } + BitmapEx aBitmapEx(aBitmap); + + vcl::PngImageWriter aPngWriter(rStream); + CPPUNIT_ASSERT_EQUAL(true, aPngWriter.write(aBitmapEx)); + aTempFile.CloseStream(); + } + { + SvStream& rStream = *aTempFile.GetStream(StreamMode::READ); + + vcl::PngImageReader aPngReader(rStream); + BitmapEx aBitmapEx; + CPPUNIT_ASSERT_EQUAL(true, aPngReader.read(aBitmapEx)); + + CPPUNIT_ASSERT_EQUAL(Size(16, 16), aBitmapEx.GetSizePixel()); + + CPPUNIT_ASSERT_EQUAL(COL_GRAY, aBitmapEx.GetPixelColor(0, 0)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTGRAY, aBitmapEx.GetPixelColor(15, 15)); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, aBitmapEx.GetPixelColor(15, 0)); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, aBitmapEx.GetPixelColor(0, 15)); + } +} + +void PngFilterTest::testPngRoundtrip24() +{ + utl::TempFileNamed aTempFile(u"testPngRoundtrip24"); + if (!bKeepTemp) + aTempFile.EnableKillingFile(); + { + SvStream& rStream = *aTempFile.GetStream(StreamMode::WRITE); + Bitmap aBitmap(Size(16, 16), vcl::PixelFormat::N24_BPP); + { + BitmapScopedWriteAccess pWriteAccess(aBitmap); + pWriteAccess->Erase(COL_BLACK); + for (int i = 0; i < 8; ++i) + { + for (int j = 0; j < 8; ++j) + { + pWriteAccess->SetPixel(i, j, COL_LIGHTRED); + } + } + for (int i = 8; i < 16; ++i) + { + for (int j = 8; j < 16; ++j) + { + pWriteAccess->SetPixel(i, j, COL_LIGHTBLUE); + } + } + } + BitmapEx aBitmapEx(aBitmap); + + vcl::PngImageWriter aPngWriter(rStream); + CPPUNIT_ASSERT_EQUAL(true, aPngWriter.write(aBitmapEx)); + } + { + SvStream& rStream = *aTempFile.GetStream(StreamMode::READ); + rStream.Seek(0); + + vcl::PngImageReader aPngReader(rStream); + BitmapEx aBitmapEx; + CPPUNIT_ASSERT_EQUAL(true, aPngReader.read(aBitmapEx)); + + CPPUNIT_ASSERT_EQUAL(Size(16, 16), aBitmapEx.GetSizePixel()); + + CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aBitmapEx.GetPixelColor(0, 0)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, aBitmapEx.GetPixelColor(15, 15)); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, aBitmapEx.GetPixelColor(15, 0)); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, aBitmapEx.GetPixelColor(0, 15)); + } +} + +void PngFilterTest::testPngRoundtrip24_8() +{ + utl::TempFileNamed aTempFile(u"testPngRoundtrip24_8"); + if (!bKeepTemp) + aTempFile.EnableKillingFile(); + { + SvStream& rStream = *aTempFile.GetStream(StreamMode::WRITE); + Bitmap aBitmap(Size(16, 16), vcl::PixelFormat::N24_BPP); + AlphaMask aAlpha(Size(16, 16)); + { + BitmapScopedWriteAccess pWriteAccessBitmap(aBitmap); + BitmapScopedWriteAccess pWriteAccessAlpha(aAlpha); + pWriteAccessAlpha->Erase(Color(0xAA, 0xAA, 0xAA)); + pWriteAccessBitmap->Erase(COL_BLACK); + for (int i = 0; i < 8; ++i) + { + for (int j = 0; j < 8; ++j) + { + pWriteAccessBitmap->SetPixel(i, j, COL_LIGHTRED); + pWriteAccessAlpha->SetPixel(i, j, Color(0xBB, 0xBB, 0xBB)); + } + } + for (int i = 8; i < 16; ++i) + { + for (int j = 8; j < 16; ++j) + { + pWriteAccessBitmap->SetPixel(i, j, COL_LIGHTBLUE); + pWriteAccessAlpha->SetPixel(i, j, Color(0xCC, 0xCC, 0xCC)); + } + } + } + BitmapEx aBitmapEx(aBitmap, aAlpha); + vcl::PngImageWriter aPngWriter(rStream); + CPPUNIT_ASSERT_EQUAL(true, aPngWriter.write(aBitmapEx)); + } + { + SvStream& rStream = *aTempFile.GetStream(StreamMode::READ); + rStream.Seek(0); + + vcl::PngImageReader aPngReader(rStream); + BitmapEx aBitmapEx; + CPPUNIT_ASSERT_EQUAL(true, aPngReader.read(aBitmapEx)); + + CPPUNIT_ASSERT_EQUAL(Size(16, 16), aBitmapEx.GetSizePixel()); + + CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xBB, 0xFF, 0x00, 0x00), + aBitmapEx.GetPixelColor(0, 0)); + CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xCC, 0x00, 0x00, 0xFF), + aBitmapEx.GetPixelColor(15, 15)); + CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xAA, 0x00, 0x00, 0x00), + aBitmapEx.GetPixelColor(15, 0)); + CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xAA, 0x00, 0x00, 0x00), + aBitmapEx.GetPixelColor(0, 15)); + } +} + +void PngFilterTest::testPngRoundtrip32() {} + +void PngFilterTest::testPngWrite8BitRGBPalette() +{ + SvMemoryStream aExportStream; + BitmapPalette aRedPalette; + aRedPalette.SetEntryCount(256); + for (sal_uInt16 i = 0; i < 256; i++) + { + aRedPalette[i].SetRed(i); + aRedPalette[i].SetGreen(0); + aRedPalette[i].SetBlue(0); + } + { + Bitmap aBitmap(Size(16, 16), vcl::PixelFormat::N8_BPP, &aRedPalette); + { + BitmapScopedWriteAccess pWriteAccessBitmap(aBitmap); + for (int i = 0; i < 16; i++) + { + for (int j = 0; j < 16; j++) + { + pWriteAccessBitmap->SetPixelIndex(i, j, i * 16 + j); + } + } + } + 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()); + + for (int i = 0; i < 16; i++) + { + for (int j = 0; j < 16; j++) + { + CPPUNIT_ASSERT_EQUAL(aRedPalette[i * 16 + j].GetRGBColor(), + aBitmapEx.GetPixelColor(j, i)); + } + } + } +} + +void PngFilterTest::testTdf153180MonochromeFilterPngExport() +{ + GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter(); + + Graphic aGraphicOriginal; + { + // 3 * 16 bits rgb color alpha, no background chunk + const OUString aURL(getFullUrl(u"bgan6a16.png")); + SvFileStream aFileStream(aURL, StreamMode::READ); + ErrCode aResult = rFilter.ImportGraphic(aGraphicOriginal, aURL, aFileStream); + CPPUNIT_ASSERT_EQUAL(ERRCODE_NONE, aResult); + CPPUNIT_ASSERT(aGraphicOriginal.IsAlpha()); + } + + // Apply the monochrome filter to the graphic but keep the alpha. + BitmapEx aBitmapEx(aGraphicOriginal.GetBitmapEx()); + AlphaMask aAlphaMask(aBitmapEx.GetAlphaMask()); + + BitmapEx aTmpBmpEx(aBitmapEx.GetBitmap()); + BitmapFilter::Filter(aTmpBmpEx, BitmapMonochromeFilter{ sal_uInt8{ 127 } }); + + Graphic aGraphicAfterFilter{ BitmapEx(aTmpBmpEx.GetBitmap(), aAlphaMask) }; + CPPUNIT_ASSERT(aGraphicAfterFilter.IsAlpha()); + + // export the resulting graphic + utl::TempFileNamed aTempFile(u"testPngExportTdf153180", true, u".png"); + if (!bKeepTemp) + aTempFile.EnableKillingFile(); + { + SvStream& rStream = *aTempFile.GetStream(StreamMode::WRITE); + vcl::PngImageWriter aPngWriter(rStream); + bool bWriteSuccess = aPngWriter.write(aGraphicAfterFilter.GetBitmapEx()); + CPPUNIT_ASSERT_EQUAL(true, bWriteSuccess); + aTempFile.CloseStream(); + } + { + SvStream& rStream = *aTempFile.GetStream(StreamMode::READ); + rStream.Seek(0); + // Import the png and check that it still has alpha + Graphic aGraphic; + ErrCode aResult = rFilter.ImportGraphic(aGraphic, aTempFile.GetURL(), rStream); + CPPUNIT_ASSERT_EQUAL(ERRCODE_NONE, aResult); + + // Without the accompanying patch would fail with: + // assertion failed + // -Expression : aGraphic.IsAlpha() + CPPUNIT_ASSERT(aGraphic.IsAlpha()); + } +} + +void PngFilterTest::testDump() +{ + utl::TempFileNamed aTempFile; + Bitmap aBitmap(Size(1, 1), vcl::PixelFormat::N24_BPP); + { + BitmapScopedWriteAccess pWriteAccessBitmap(aBitmap); + pWriteAccessBitmap->SetPixel(0, 0, BitmapColor()); + } + BitmapEx aBitmapEx(aBitmap); + aBitmapEx.DumpAsPng(aTempFile.GetURL().toUtf8().getStr()); + SvStream* pStream = aTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT_GREATER(static_cast<sal_uInt64>(0), pStream->remainingSize()); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(PngFilterTest); + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/qa/cppunit/png/data/alpha-rect-8bit-RGBA.png b/vcl/qa/cppunit/png/data/alpha-rect-8bit-RGBA.png Binary files differnew file mode 100644 index 0000000000..1e90e1a6cf --- /dev/null +++ b/vcl/qa/cppunit/png/data/alpha-rect-8bit-RGBA.png diff --git a/vcl/qa/cppunit/png/data/apng_simple.apng b/vcl/qa/cppunit/png/data/apng_simple.apng Binary files differnew file mode 100644 index 0000000000..445b7acaf4 --- /dev/null +++ b/vcl/qa/cppunit/png/data/apng_simple.apng diff --git a/vcl/qa/cppunit/png/data/basi0g01.png b/vcl/qa/cppunit/png/data/basi0g01.png Binary files differnew file mode 100644 index 0000000000..556fa72704 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi0g01.png diff --git a/vcl/qa/cppunit/png/data/basi0g02.png b/vcl/qa/cppunit/png/data/basi0g02.png Binary files differnew file mode 100644 index 0000000000..ce09821ef1 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi0g02.png diff --git a/vcl/qa/cppunit/png/data/basi0g04.png b/vcl/qa/cppunit/png/data/basi0g04.png Binary files differnew file mode 100644 index 0000000000..3853273f93 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi0g04.png diff --git a/vcl/qa/cppunit/png/data/basi0g08.png b/vcl/qa/cppunit/png/data/basi0g08.png Binary files differnew file mode 100644 index 0000000000..faed8bec44 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi0g08.png diff --git a/vcl/qa/cppunit/png/data/basi0g16.png b/vcl/qa/cppunit/png/data/basi0g16.png Binary files differnew file mode 100644 index 0000000000..a9f28165ef --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi0g16.png diff --git a/vcl/qa/cppunit/png/data/basi2c08.png b/vcl/qa/cppunit/png/data/basi2c08.png Binary files differnew file mode 100644 index 0000000000..2aab44d42b --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi2c08.png diff --git a/vcl/qa/cppunit/png/data/basi2c16.png b/vcl/qa/cppunit/png/data/basi2c16.png Binary files differnew file mode 100644 index 0000000000..cd7e50f914 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi2c16.png diff --git a/vcl/qa/cppunit/png/data/basi3p01.png b/vcl/qa/cppunit/png/data/basi3p01.png Binary files differnew file mode 100644 index 0000000000..00a7cea6c2 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi3p01.png diff --git a/vcl/qa/cppunit/png/data/basi3p02.png b/vcl/qa/cppunit/png/data/basi3p02.png Binary files differnew file mode 100644 index 0000000000..bb16b44b30 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi3p02.png diff --git a/vcl/qa/cppunit/png/data/basi3p04.png b/vcl/qa/cppunit/png/data/basi3p04.png Binary files differnew file mode 100644 index 0000000000..b4e888e247 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi3p04.png diff --git a/vcl/qa/cppunit/png/data/basi3p08.png b/vcl/qa/cppunit/png/data/basi3p08.png Binary files differnew file mode 100644 index 0000000000..50a6d1cac7 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi3p08.png diff --git a/vcl/qa/cppunit/png/data/basi4a08.png b/vcl/qa/cppunit/png/data/basi4a08.png Binary files differnew file mode 100644 index 0000000000..398132be5f --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi4a08.png diff --git a/vcl/qa/cppunit/png/data/basi4a16.png b/vcl/qa/cppunit/png/data/basi4a16.png Binary files differnew file mode 100644 index 0000000000..51192e7311 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi4a16.png diff --git a/vcl/qa/cppunit/png/data/basi6a08.png b/vcl/qa/cppunit/png/data/basi6a08.png Binary files differnew file mode 100644 index 0000000000..aecb32e0d9 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi6a08.png diff --git a/vcl/qa/cppunit/png/data/basi6a16.png b/vcl/qa/cppunit/png/data/basi6a16.png Binary files differnew file mode 100644 index 0000000000..4181533ad8 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basi6a16.png diff --git a/vcl/qa/cppunit/png/data/basn0g01.png b/vcl/qa/cppunit/png/data/basn0g01.png Binary files differnew file mode 100644 index 0000000000..1d722423aa --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn0g01.png diff --git a/vcl/qa/cppunit/png/data/basn0g02.png b/vcl/qa/cppunit/png/data/basn0g02.png Binary files differnew file mode 100644 index 0000000000..508332418f --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn0g02.png diff --git a/vcl/qa/cppunit/png/data/basn0g04.png b/vcl/qa/cppunit/png/data/basn0g04.png Binary files differnew file mode 100644 index 0000000000..0bf3687863 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn0g04.png diff --git a/vcl/qa/cppunit/png/data/basn0g08.png b/vcl/qa/cppunit/png/data/basn0g08.png Binary files differnew file mode 100644 index 0000000000..23c82379a2 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn0g08.png diff --git a/vcl/qa/cppunit/png/data/basn0g16.png b/vcl/qa/cppunit/png/data/basn0g16.png Binary files differnew file mode 100644 index 0000000000..e7c82f78eb --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn0g16.png diff --git a/vcl/qa/cppunit/png/data/basn2c08.png b/vcl/qa/cppunit/png/data/basn2c08.png Binary files differnew file mode 100644 index 0000000000..db5ad15865 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn2c08.png diff --git a/vcl/qa/cppunit/png/data/basn2c16.png b/vcl/qa/cppunit/png/data/basn2c16.png Binary files differnew file mode 100644 index 0000000000..50c1cb91a0 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn2c16.png diff --git a/vcl/qa/cppunit/png/data/basn3p01.png b/vcl/qa/cppunit/png/data/basn3p01.png Binary files differnew file mode 100644 index 0000000000..b145c2b8ef --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn3p01.png diff --git a/vcl/qa/cppunit/png/data/basn3p02.png b/vcl/qa/cppunit/png/data/basn3p02.png Binary files differnew file mode 100644 index 0000000000..8985b3d818 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn3p02.png diff --git a/vcl/qa/cppunit/png/data/basn3p04.png b/vcl/qa/cppunit/png/data/basn3p04.png Binary files differnew file mode 100644 index 0000000000..0fbf9e827b --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn3p04.png diff --git a/vcl/qa/cppunit/png/data/basn3p08.png b/vcl/qa/cppunit/png/data/basn3p08.png Binary files differnew file mode 100644 index 0000000000..0ddad07e5f --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn3p08.png diff --git a/vcl/qa/cppunit/png/data/basn4a08.png b/vcl/qa/cppunit/png/data/basn4a08.png Binary files differnew file mode 100644 index 0000000000..3e13052201 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn4a08.png diff --git a/vcl/qa/cppunit/png/data/basn4a16.png b/vcl/qa/cppunit/png/data/basn4a16.png Binary files differnew file mode 100644 index 0000000000..8243644d07 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn4a16.png diff --git a/vcl/qa/cppunit/png/data/basn6a08.png b/vcl/qa/cppunit/png/data/basn6a08.png Binary files differnew file mode 100644 index 0000000000..e608738763 --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn6a08.png diff --git a/vcl/qa/cppunit/png/data/basn6a16.png b/vcl/qa/cppunit/png/data/basn6a16.png Binary files differnew file mode 100644 index 0000000000..984a99525f --- /dev/null +++ b/vcl/qa/cppunit/png/data/basn6a16.png diff --git a/vcl/qa/cppunit/png/data/bgai4a08.png b/vcl/qa/cppunit/png/data/bgai4a08.png Binary files differnew file mode 100644 index 0000000000..398132be5f --- /dev/null +++ b/vcl/qa/cppunit/png/data/bgai4a08.png diff --git a/vcl/qa/cppunit/png/data/bgai4a16.png b/vcl/qa/cppunit/png/data/bgai4a16.png Binary files differnew file mode 100644 index 0000000000..51192e7311 --- /dev/null +++ b/vcl/qa/cppunit/png/data/bgai4a16.png diff --git a/vcl/qa/cppunit/png/data/bgan6a08.png b/vcl/qa/cppunit/png/data/bgan6a08.png Binary files differnew file mode 100644 index 0000000000..e608738763 --- /dev/null +++ b/vcl/qa/cppunit/png/data/bgan6a08.png diff --git a/vcl/qa/cppunit/png/data/bgan6a16.png b/vcl/qa/cppunit/png/data/bgan6a16.png Binary files differnew file mode 100644 index 0000000000..984a99525f --- /dev/null +++ b/vcl/qa/cppunit/png/data/bgan6a16.png diff --git a/vcl/qa/cppunit/png/data/bgbn4a08.png b/vcl/qa/cppunit/png/data/bgbn4a08.png Binary files differnew file mode 100644 index 0000000000..7cbefc3bff --- /dev/null +++ b/vcl/qa/cppunit/png/data/bgbn4a08.png diff --git a/vcl/qa/cppunit/png/data/bggn4a16.png b/vcl/qa/cppunit/png/data/bggn4a16.png Binary files differnew file mode 100644 index 0000000000..13fd85ba19 --- /dev/null +++ b/vcl/qa/cppunit/png/data/bggn4a16.png diff --git a/vcl/qa/cppunit/png/data/bgwn6a08.png b/vcl/qa/cppunit/png/data/bgwn6a08.png Binary files differnew file mode 100644 index 0000000000..a67ff205bb --- /dev/null +++ b/vcl/qa/cppunit/png/data/bgwn6a08.png diff --git a/vcl/qa/cppunit/png/data/bgyn6a16.png b/vcl/qa/cppunit/png/data/bgyn6a16.png Binary files differnew file mode 100644 index 0000000000..ae3e9be58a --- /dev/null +++ b/vcl/qa/cppunit/png/data/bgyn6a16.png diff --git a/vcl/qa/cppunit/png/data/ccwn2c08.png b/vcl/qa/cppunit/png/data/ccwn2c08.png Binary files differnew file mode 100644 index 0000000000..47c24817b7 --- /dev/null +++ b/vcl/qa/cppunit/png/data/ccwn2c08.png diff --git a/vcl/qa/cppunit/png/data/ccwn3p08.png b/vcl/qa/cppunit/png/data/ccwn3p08.png Binary files differnew file mode 100644 index 0000000000..8bb2c10981 --- /dev/null +++ b/vcl/qa/cppunit/png/data/ccwn3p08.png diff --git a/vcl/qa/cppunit/png/data/cdfn2c08.png b/vcl/qa/cppunit/png/data/cdfn2c08.png Binary files differnew file mode 100644 index 0000000000..559e5261e7 --- /dev/null +++ b/vcl/qa/cppunit/png/data/cdfn2c08.png diff --git a/vcl/qa/cppunit/png/data/cdhn2c08.png b/vcl/qa/cppunit/png/data/cdhn2c08.png Binary files differnew file mode 100644 index 0000000000..3e07e8ecbd --- /dev/null +++ b/vcl/qa/cppunit/png/data/cdhn2c08.png diff --git a/vcl/qa/cppunit/png/data/cdsn2c08.png b/vcl/qa/cppunit/png/data/cdsn2c08.png Binary files differnew file mode 100644 index 0000000000..076c32cc08 --- /dev/null +++ b/vcl/qa/cppunit/png/data/cdsn2c08.png diff --git a/vcl/qa/cppunit/png/data/cdun2c08.png b/vcl/qa/cppunit/png/data/cdun2c08.png Binary files differnew file mode 100644 index 0000000000..846033be6b --- /dev/null +++ b/vcl/qa/cppunit/png/data/cdun2c08.png diff --git a/vcl/qa/cppunit/png/data/ch1n3p04.png b/vcl/qa/cppunit/png/data/ch1n3p04.png Binary files differnew file mode 100644 index 0000000000..17cd12dfc9 --- /dev/null +++ b/vcl/qa/cppunit/png/data/ch1n3p04.png diff --git a/vcl/qa/cppunit/png/data/ch2n3p08.png b/vcl/qa/cppunit/png/data/ch2n3p08.png Binary files differnew file mode 100644 index 0000000000..25c17987a7 --- /dev/null +++ b/vcl/qa/cppunit/png/data/ch2n3p08.png diff --git a/vcl/qa/cppunit/png/data/cm0n0g04.png b/vcl/qa/cppunit/png/data/cm0n0g04.png Binary files differnew file mode 100644 index 0000000000..9fba5db3b8 --- /dev/null +++ b/vcl/qa/cppunit/png/data/cm0n0g04.png diff --git a/vcl/qa/cppunit/png/data/cm7n0g04.png b/vcl/qa/cppunit/png/data/cm7n0g04.png Binary files differnew file mode 100644 index 0000000000..f7dc46e685 --- /dev/null +++ b/vcl/qa/cppunit/png/data/cm7n0g04.png diff --git a/vcl/qa/cppunit/png/data/cm9n0g04.png b/vcl/qa/cppunit/png/data/cm9n0g04.png Binary files differnew file mode 100644 index 0000000000..dd70911adc --- /dev/null +++ b/vcl/qa/cppunit/png/data/cm9n0g04.png diff --git a/vcl/qa/cppunit/png/data/color-rect-4bit-pal.png b/vcl/qa/cppunit/png/data/color-rect-4bit-pal.png Binary files differnew file mode 100644 index 0000000000..740eede512 --- /dev/null +++ b/vcl/qa/cppunit/png/data/color-rect-4bit-pal.png diff --git a/vcl/qa/cppunit/png/data/color-rect-8bit-RGB-interlaced.png b/vcl/qa/cppunit/png/data/color-rect-8bit-RGB-interlaced.png Binary files differnew file mode 100644 index 0000000000..17ca9a350d --- /dev/null +++ b/vcl/qa/cppunit/png/data/color-rect-8bit-RGB-interlaced.png diff --git a/vcl/qa/cppunit/png/data/color-rect-8bit-RGB.png b/vcl/qa/cppunit/png/data/color-rect-8bit-RGB.png Binary files differnew file mode 100644 index 0000000000..727859d8a7 --- /dev/null +++ b/vcl/qa/cppunit/png/data/color-rect-8bit-RGB.png diff --git a/vcl/qa/cppunit/png/data/cs3n2c16.png b/vcl/qa/cppunit/png/data/cs3n2c16.png Binary files differnew file mode 100644 index 0000000000..bf5fd20a20 --- /dev/null +++ b/vcl/qa/cppunit/png/data/cs3n2c16.png diff --git a/vcl/qa/cppunit/png/data/cs3n3p08.png b/vcl/qa/cppunit/png/data/cs3n3p08.png Binary files differnew file mode 100644 index 0000000000..f4a66237bf --- /dev/null +++ b/vcl/qa/cppunit/png/data/cs3n3p08.png diff --git a/vcl/qa/cppunit/png/data/cs5n2c08.png b/vcl/qa/cppunit/png/data/cs5n2c08.png Binary files differnew file mode 100644 index 0000000000..40f947c33e --- /dev/null +++ b/vcl/qa/cppunit/png/data/cs5n2c08.png diff --git a/vcl/qa/cppunit/png/data/cs5n3p08.png b/vcl/qa/cppunit/png/data/cs5n3p08.png Binary files differnew file mode 100644 index 0000000000..dfd6e6e6ec --- /dev/null +++ b/vcl/qa/cppunit/png/data/cs5n3p08.png diff --git a/vcl/qa/cppunit/png/data/cs8n2c08.png b/vcl/qa/cppunit/png/data/cs8n2c08.png Binary files differnew file mode 100644 index 0000000000..8e01d3294f --- /dev/null +++ b/vcl/qa/cppunit/png/data/cs8n2c08.png diff --git a/vcl/qa/cppunit/png/data/cs8n3p08.png b/vcl/qa/cppunit/png/data/cs8n3p08.png Binary files differnew file mode 100644 index 0000000000..a44066eb6e --- /dev/null +++ b/vcl/qa/cppunit/png/data/cs8n3p08.png diff --git a/vcl/qa/cppunit/png/data/ct0n0g04.png b/vcl/qa/cppunit/png/data/ct0n0g04.png Binary files differnew file mode 100644 index 0000000000..40d1e062f8 --- /dev/null +++ b/vcl/qa/cppunit/png/data/ct0n0g04.png diff --git a/vcl/qa/cppunit/png/data/ct1n0g04.png b/vcl/qa/cppunit/png/data/ct1n0g04.png Binary files differnew file mode 100644 index 0000000000..3ba110aa76 --- /dev/null +++ b/vcl/qa/cppunit/png/data/ct1n0g04.png diff --git a/vcl/qa/cppunit/png/data/cten0g04.png b/vcl/qa/cppunit/png/data/cten0g04.png Binary files differnew file mode 100644 index 0000000000..a6a56faf2b --- /dev/null +++ b/vcl/qa/cppunit/png/data/cten0g04.png diff --git a/vcl/qa/cppunit/png/data/ctfn0g04.png b/vcl/qa/cppunit/png/data/ctfn0g04.png Binary files differnew file mode 100644 index 0000000000..353873ebbd --- /dev/null +++ b/vcl/qa/cppunit/png/data/ctfn0g04.png diff --git a/vcl/qa/cppunit/png/data/ctgn0g04.png b/vcl/qa/cppunit/png/data/ctgn0g04.png Binary files differnew file mode 100644 index 0000000000..453f2b0a49 --- /dev/null +++ b/vcl/qa/cppunit/png/data/ctgn0g04.png diff --git a/vcl/qa/cppunit/png/data/cthn0g04.png b/vcl/qa/cppunit/png/data/cthn0g04.png Binary files differnew file mode 100644 index 0000000000..8fce253e6d --- /dev/null +++ b/vcl/qa/cppunit/png/data/cthn0g04.png diff --git a/vcl/qa/cppunit/png/data/ctjn0g04.png b/vcl/qa/cppunit/png/data/ctjn0g04.png Binary files differnew file mode 100644 index 0000000000..a77b8d2fee --- /dev/null +++ b/vcl/qa/cppunit/png/data/ctjn0g04.png diff --git a/vcl/qa/cppunit/png/data/ctzn0g04.png b/vcl/qa/cppunit/png/data/ctzn0g04.png Binary files differnew file mode 100644 index 0000000000..b4401c9cfc --- /dev/null +++ b/vcl/qa/cppunit/png/data/ctzn0g04.png diff --git a/vcl/qa/cppunit/png/data/dummy.gif b/vcl/qa/cppunit/png/data/dummy.gif Binary files differnew file mode 100644 index 0000000000..fd5c62dcdc --- /dev/null +++ b/vcl/qa/cppunit/png/data/dummy.gif diff --git a/vcl/qa/cppunit/png/data/exif2c08.png b/vcl/qa/cppunit/png/data/exif2c08.png Binary files differnew file mode 100644 index 0000000000..56eb734991 --- /dev/null +++ b/vcl/qa/cppunit/png/data/exif2c08.png diff --git a/vcl/qa/cppunit/png/data/f00n0g08.png b/vcl/qa/cppunit/png/data/f00n0g08.png Binary files differnew file mode 100644 index 0000000000..45a0075967 --- /dev/null +++ b/vcl/qa/cppunit/png/data/f00n0g08.png diff --git a/vcl/qa/cppunit/png/data/f00n2c08.png b/vcl/qa/cppunit/png/data/f00n2c08.png Binary files differnew file mode 100644 index 0000000000..d6a1ffff62 --- /dev/null +++ b/vcl/qa/cppunit/png/data/f00n2c08.png diff --git a/vcl/qa/cppunit/png/data/f01n0g08.png b/vcl/qa/cppunit/png/data/f01n0g08.png Binary files differnew file mode 100644 index 0000000000..4a1107b463 --- /dev/null +++ b/vcl/qa/cppunit/png/data/f01n0g08.png diff --git a/vcl/qa/cppunit/png/data/f01n2c08.png b/vcl/qa/cppunit/png/data/f01n2c08.png Binary files differnew file mode 100644 index 0000000000..26fee958ce --- /dev/null +++ b/vcl/qa/cppunit/png/data/f01n2c08.png diff --git a/vcl/qa/cppunit/png/data/f02n0g08.png b/vcl/qa/cppunit/png/data/f02n0g08.png Binary files differnew file mode 100644 index 0000000000..bfe410c5e7 --- /dev/null +++ b/vcl/qa/cppunit/png/data/f02n0g08.png diff --git a/vcl/qa/cppunit/png/data/f02n2c08.png b/vcl/qa/cppunit/png/data/f02n2c08.png Binary files differnew file mode 100644 index 0000000000..e590f12348 --- /dev/null +++ b/vcl/qa/cppunit/png/data/f02n2c08.png diff --git a/vcl/qa/cppunit/png/data/f03n0g08.png b/vcl/qa/cppunit/png/data/f03n0g08.png Binary files differnew file mode 100644 index 0000000000..ed01e2923c --- /dev/null +++ b/vcl/qa/cppunit/png/data/f03n0g08.png diff --git a/vcl/qa/cppunit/png/data/f03n2c08.png b/vcl/qa/cppunit/png/data/f03n2c08.png Binary files differnew file mode 100644 index 0000000000..758115059d --- /dev/null +++ b/vcl/qa/cppunit/png/data/f03n2c08.png diff --git a/vcl/qa/cppunit/png/data/f04n0g08.png b/vcl/qa/cppunit/png/data/f04n0g08.png Binary files differnew file mode 100644 index 0000000000..663fdae3e7 --- /dev/null +++ b/vcl/qa/cppunit/png/data/f04n0g08.png diff --git a/vcl/qa/cppunit/png/data/f04n2c08.png b/vcl/qa/cppunit/png/data/f04n2c08.png Binary files differnew file mode 100644 index 0000000000..3c8b5116e7 --- /dev/null +++ b/vcl/qa/cppunit/png/data/f04n2c08.png diff --git a/vcl/qa/cppunit/png/data/f99n0g04.png b/vcl/qa/cppunit/png/data/f99n0g04.png Binary files differnew file mode 100644 index 0000000000..0b521c1d56 --- /dev/null +++ b/vcl/qa/cppunit/png/data/f99n0g04.png diff --git a/vcl/qa/cppunit/png/data/g03n0g16.png b/vcl/qa/cppunit/png/data/g03n0g16.png Binary files differnew file mode 100644 index 0000000000..41083ca80f --- /dev/null +++ b/vcl/qa/cppunit/png/data/g03n0g16.png diff --git a/vcl/qa/cppunit/png/data/g03n2c08.png b/vcl/qa/cppunit/png/data/g03n2c08.png Binary files differnew file mode 100644 index 0000000000..a9354dbee6 --- /dev/null +++ b/vcl/qa/cppunit/png/data/g03n2c08.png diff --git a/vcl/qa/cppunit/png/data/g03n3p04.png b/vcl/qa/cppunit/png/data/g03n3p04.png Binary files differnew file mode 100644 index 0000000000..60396c95af --- /dev/null +++ b/vcl/qa/cppunit/png/data/g03n3p04.png diff --git a/vcl/qa/cppunit/png/data/g04n0g16.png b/vcl/qa/cppunit/png/data/g04n0g16.png Binary files differnew file mode 100644 index 0000000000..32395b76c9 --- /dev/null +++ b/vcl/qa/cppunit/png/data/g04n0g16.png diff --git a/vcl/qa/cppunit/png/data/g04n2c08.png b/vcl/qa/cppunit/png/data/g04n2c08.png Binary files differnew file mode 100644 index 0000000000..a652b0ce87 --- /dev/null +++ b/vcl/qa/cppunit/png/data/g04n2c08.png diff --git a/vcl/qa/cppunit/png/data/g04n3p04.png b/vcl/qa/cppunit/png/data/g04n3p04.png Binary files differnew file mode 100644 index 0000000000..5661cc3131 --- /dev/null +++ b/vcl/qa/cppunit/png/data/g04n3p04.png diff --git a/vcl/qa/cppunit/png/data/g05n0g16.png b/vcl/qa/cppunit/png/data/g05n0g16.png Binary files differnew file mode 100644 index 0000000000..70b37f01e2 --- /dev/null +++ b/vcl/qa/cppunit/png/data/g05n0g16.png diff --git a/vcl/qa/cppunit/png/data/g05n2c08.png b/vcl/qa/cppunit/png/data/g05n2c08.png Binary files differnew file mode 100644 index 0000000000..932c136536 --- /dev/null +++ b/vcl/qa/cppunit/png/data/g05n2c08.png diff --git a/vcl/qa/cppunit/png/data/g05n3p04.png b/vcl/qa/cppunit/png/data/g05n3p04.png Binary files differnew file mode 100644 index 0000000000..9619930585 --- /dev/null +++ b/vcl/qa/cppunit/png/data/g05n3p04.png diff --git a/vcl/qa/cppunit/png/data/g07n0g16.png b/vcl/qa/cppunit/png/data/g07n0g16.png Binary files differnew file mode 100644 index 0000000000..d6a47c2d57 --- /dev/null +++ b/vcl/qa/cppunit/png/data/g07n0g16.png diff --git a/vcl/qa/cppunit/png/data/g07n2c08.png b/vcl/qa/cppunit/png/data/g07n2c08.png Binary files differnew file mode 100644 index 0000000000..597346460f --- /dev/null +++ b/vcl/qa/cppunit/png/data/g07n2c08.png diff --git a/vcl/qa/cppunit/png/data/g07n3p04.png b/vcl/qa/cppunit/png/data/g07n3p04.png Binary files differnew file mode 100644 index 0000000000..c73fb61365 --- /dev/null +++ b/vcl/qa/cppunit/png/data/g07n3p04.png diff --git a/vcl/qa/cppunit/png/data/g10n0g16.png b/vcl/qa/cppunit/png/data/g10n0g16.png Binary files differnew file mode 100644 index 0000000000..85f2c958e9 --- /dev/null +++ b/vcl/qa/cppunit/png/data/g10n0g16.png diff --git a/vcl/qa/cppunit/png/data/g10n2c08.png b/vcl/qa/cppunit/png/data/g10n2c08.png Binary files differnew file mode 100644 index 0000000000..b3039970c1 --- /dev/null +++ b/vcl/qa/cppunit/png/data/g10n2c08.png diff --git a/vcl/qa/cppunit/png/data/g10n3p04.png b/vcl/qa/cppunit/png/data/g10n3p04.png Binary files differnew file mode 100644 index 0000000000..1b6a6be2ca --- /dev/null +++ b/vcl/qa/cppunit/png/data/g10n3p04.png diff --git a/vcl/qa/cppunit/png/data/g25n0g16.png b/vcl/qa/cppunit/png/data/g25n0g16.png Binary files differnew file mode 100644 index 0000000000..a9f6787c7a --- /dev/null +++ b/vcl/qa/cppunit/png/data/g25n0g16.png diff --git a/vcl/qa/cppunit/png/data/g25n2c08.png b/vcl/qa/cppunit/png/data/g25n2c08.png Binary files differnew file mode 100644 index 0000000000..03f505a64b --- /dev/null +++ b/vcl/qa/cppunit/png/data/g25n2c08.png diff --git a/vcl/qa/cppunit/png/data/g25n3p04.png b/vcl/qa/cppunit/png/data/g25n3p04.png Binary files differnew file mode 100644 index 0000000000..4f943c6175 --- /dev/null +++ b/vcl/qa/cppunit/png/data/g25n3p04.png diff --git a/vcl/qa/cppunit/png/data/ms-gif.png b/vcl/qa/cppunit/png/data/ms-gif.png Binary files differnew file mode 100644 index 0000000000..1f683241f5 --- /dev/null +++ b/vcl/qa/cppunit/png/data/ms-gif.png diff --git a/vcl/qa/cppunit/png/data/oi1n0g16.png b/vcl/qa/cppunit/png/data/oi1n0g16.png Binary files differnew file mode 100644 index 0000000000..e7c82f78eb --- /dev/null +++ b/vcl/qa/cppunit/png/data/oi1n0g16.png diff --git a/vcl/qa/cppunit/png/data/oi1n2c16.png b/vcl/qa/cppunit/png/data/oi1n2c16.png Binary files differnew file mode 100644 index 0000000000..50c1cb91a0 --- /dev/null +++ b/vcl/qa/cppunit/png/data/oi1n2c16.png diff --git a/vcl/qa/cppunit/png/data/oi2n0g16.png b/vcl/qa/cppunit/png/data/oi2n0g16.png Binary files differnew file mode 100644 index 0000000000..14d64c583d --- /dev/null +++ b/vcl/qa/cppunit/png/data/oi2n0g16.png diff --git a/vcl/qa/cppunit/png/data/oi2n2c16.png b/vcl/qa/cppunit/png/data/oi2n2c16.png Binary files differnew file mode 100644 index 0000000000..4c2e3e3352 --- /dev/null +++ b/vcl/qa/cppunit/png/data/oi2n2c16.png diff --git a/vcl/qa/cppunit/png/data/oi4n0g16.png b/vcl/qa/cppunit/png/data/oi4n0g16.png Binary files differnew file mode 100644 index 0000000000..69e73ede31 --- /dev/null +++ b/vcl/qa/cppunit/png/data/oi4n0g16.png diff --git a/vcl/qa/cppunit/png/data/oi4n2c16.png b/vcl/qa/cppunit/png/data/oi4n2c16.png Binary files differnew file mode 100644 index 0000000000..93691e373a --- /dev/null +++ b/vcl/qa/cppunit/png/data/oi4n2c16.png diff --git a/vcl/qa/cppunit/png/data/oi9n0g16.png b/vcl/qa/cppunit/png/data/oi9n0g16.png Binary files differnew file mode 100644 index 0000000000..9248413576 --- /dev/null +++ b/vcl/qa/cppunit/png/data/oi9n0g16.png diff --git a/vcl/qa/cppunit/png/data/oi9n2c16.png b/vcl/qa/cppunit/png/data/oi9n2c16.png Binary files differnew file mode 100644 index 0000000000..f0512e49f2 --- /dev/null +++ b/vcl/qa/cppunit/png/data/oi9n2c16.png diff --git a/vcl/qa/cppunit/png/data/pp0n2c16.png b/vcl/qa/cppunit/png/data/pp0n2c16.png Binary files differnew file mode 100644 index 0000000000..8f2aad7335 --- /dev/null +++ b/vcl/qa/cppunit/png/data/pp0n2c16.png diff --git a/vcl/qa/cppunit/png/data/pp0n6a08.png b/vcl/qa/cppunit/png/data/pp0n6a08.png Binary files differnew file mode 100644 index 0000000000..4ed7a30e4d --- /dev/null +++ b/vcl/qa/cppunit/png/data/pp0n6a08.png diff --git a/vcl/qa/cppunit/png/data/ps1n0g08.png b/vcl/qa/cppunit/png/data/ps1n0g08.png Binary files differnew file mode 100644 index 0000000000..99625fa4ba --- /dev/null +++ b/vcl/qa/cppunit/png/data/ps1n0g08.png diff --git a/vcl/qa/cppunit/png/data/ps1n2c16.png b/vcl/qa/cppunit/png/data/ps1n2c16.png Binary files differnew file mode 100644 index 0000000000..0c7a6b380e --- /dev/null +++ b/vcl/qa/cppunit/png/data/ps1n2c16.png diff --git a/vcl/qa/cppunit/png/data/ps2n0g08.png b/vcl/qa/cppunit/png/data/ps2n0g08.png Binary files differnew file mode 100644 index 0000000000..90b2979685 --- /dev/null +++ b/vcl/qa/cppunit/png/data/ps2n0g08.png diff --git a/vcl/qa/cppunit/png/data/ps2n2c16.png b/vcl/qa/cppunit/png/data/ps2n2c16.png Binary files differnew file mode 100644 index 0000000000..a4a181e4ec --- /dev/null +++ b/vcl/qa/cppunit/png/data/ps2n2c16.png diff --git a/vcl/qa/cppunit/png/data/rect-1bit-pal.png b/vcl/qa/cppunit/png/data/rect-1bit-pal.png Binary files differnew file mode 100644 index 0000000000..cf7ac3e7c3 --- /dev/null +++ b/vcl/qa/cppunit/png/data/rect-1bit-pal.png diff --git a/vcl/qa/cppunit/png/data/s01i3p01.png b/vcl/qa/cppunit/png/data/s01i3p01.png Binary files differnew file mode 100644 index 0000000000..6c0fad1fc9 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s01i3p01.png diff --git a/vcl/qa/cppunit/png/data/s01n3p01.png b/vcl/qa/cppunit/png/data/s01n3p01.png Binary files differnew file mode 100644 index 0000000000..cb2c8c7826 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s01n3p01.png diff --git a/vcl/qa/cppunit/png/data/s02i3p01.png b/vcl/qa/cppunit/png/data/s02i3p01.png Binary files differnew file mode 100644 index 0000000000..2defaed911 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s02i3p01.png diff --git a/vcl/qa/cppunit/png/data/s02n3p01.png b/vcl/qa/cppunit/png/data/s02n3p01.png Binary files differnew file mode 100644 index 0000000000..2b1b669643 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s02n3p01.png diff --git a/vcl/qa/cppunit/png/data/s03i3p01.png b/vcl/qa/cppunit/png/data/s03i3p01.png Binary files differnew file mode 100644 index 0000000000..c23fdc4631 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s03i3p01.png diff --git a/vcl/qa/cppunit/png/data/s03n3p01.png b/vcl/qa/cppunit/png/data/s03n3p01.png Binary files differnew file mode 100644 index 0000000000..6d96ee4f87 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s03n3p01.png diff --git a/vcl/qa/cppunit/png/data/s04i3p01.png b/vcl/qa/cppunit/png/data/s04i3p01.png Binary files differnew file mode 100644 index 0000000000..0e710c2c39 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s04i3p01.png diff --git a/vcl/qa/cppunit/png/data/s04n3p01.png b/vcl/qa/cppunit/png/data/s04n3p01.png Binary files differnew file mode 100644 index 0000000000..956396c45b --- /dev/null +++ b/vcl/qa/cppunit/png/data/s04n3p01.png diff --git a/vcl/qa/cppunit/png/data/s05i3p02.png b/vcl/qa/cppunit/png/data/s05i3p02.png Binary files differnew file mode 100644 index 0000000000..d14cbd351a --- /dev/null +++ b/vcl/qa/cppunit/png/data/s05i3p02.png diff --git a/vcl/qa/cppunit/png/data/s05n3p02.png b/vcl/qa/cppunit/png/data/s05n3p02.png Binary files differnew file mode 100644 index 0000000000..bf940f0576 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s05n3p02.png diff --git a/vcl/qa/cppunit/png/data/s06i3p02.png b/vcl/qa/cppunit/png/data/s06i3p02.png Binary files differnew file mode 100644 index 0000000000..456ada3200 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s06i3p02.png diff --git a/vcl/qa/cppunit/png/data/s06n3p02.png b/vcl/qa/cppunit/png/data/s06n3p02.png Binary files differnew file mode 100644 index 0000000000..501064dc25 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s06n3p02.png diff --git a/vcl/qa/cppunit/png/data/s07i3p02.png b/vcl/qa/cppunit/png/data/s07i3p02.png Binary files differnew file mode 100644 index 0000000000..44b66bab9e --- /dev/null +++ b/vcl/qa/cppunit/png/data/s07i3p02.png diff --git a/vcl/qa/cppunit/png/data/s07n3p02.png b/vcl/qa/cppunit/png/data/s07n3p02.png Binary files differnew file mode 100644 index 0000000000..6a582593d6 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s07n3p02.png diff --git a/vcl/qa/cppunit/png/data/s08i3p02.png b/vcl/qa/cppunit/png/data/s08i3p02.png Binary files differnew file mode 100644 index 0000000000..acf74f3fc4 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s08i3p02.png diff --git a/vcl/qa/cppunit/png/data/s08n3p02.png b/vcl/qa/cppunit/png/data/s08n3p02.png Binary files differnew file mode 100644 index 0000000000..b7094e1b4f --- /dev/null +++ b/vcl/qa/cppunit/png/data/s08n3p02.png diff --git a/vcl/qa/cppunit/png/data/s09i3p02.png b/vcl/qa/cppunit/png/data/s09i3p02.png Binary files differnew file mode 100644 index 0000000000..0bfae8e456 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s09i3p02.png diff --git a/vcl/qa/cppunit/png/data/s09n3p02.png b/vcl/qa/cppunit/png/data/s09n3p02.png Binary files differnew file mode 100644 index 0000000000..711ab82451 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s09n3p02.png diff --git a/vcl/qa/cppunit/png/data/s32i3p04.png b/vcl/qa/cppunit/png/data/s32i3p04.png Binary files differnew file mode 100644 index 0000000000..0841910b72 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s32i3p04.png diff --git a/vcl/qa/cppunit/png/data/s32n3p04.png b/vcl/qa/cppunit/png/data/s32n3p04.png Binary files differnew file mode 100644 index 0000000000..fa58e3e3f6 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s32n3p04.png diff --git a/vcl/qa/cppunit/png/data/s33i3p04.png b/vcl/qa/cppunit/png/data/s33i3p04.png Binary files differnew file mode 100644 index 0000000000..ab0dc14aba --- /dev/null +++ b/vcl/qa/cppunit/png/data/s33i3p04.png diff --git a/vcl/qa/cppunit/png/data/s33n3p04.png b/vcl/qa/cppunit/png/data/s33n3p04.png Binary files differnew file mode 100644 index 0000000000..764f1a3dc7 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s33n3p04.png diff --git a/vcl/qa/cppunit/png/data/s34i3p04.png b/vcl/qa/cppunit/png/data/s34i3p04.png Binary files differnew file mode 100644 index 0000000000..bd99039be4 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s34i3p04.png diff --git a/vcl/qa/cppunit/png/data/s34n3p04.png b/vcl/qa/cppunit/png/data/s34n3p04.png Binary files differnew file mode 100644 index 0000000000..9cbc68b3b9 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s34n3p04.png diff --git a/vcl/qa/cppunit/png/data/s35i3p04.png b/vcl/qa/cppunit/png/data/s35i3p04.png Binary files differnew file mode 100644 index 0000000000..e2a5e0a659 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s35i3p04.png diff --git a/vcl/qa/cppunit/png/data/s35n3p04.png b/vcl/qa/cppunit/png/data/s35n3p04.png Binary files differnew file mode 100644 index 0000000000..90b892ebaf --- /dev/null +++ b/vcl/qa/cppunit/png/data/s35n3p04.png diff --git a/vcl/qa/cppunit/png/data/s36i3p04.png b/vcl/qa/cppunit/png/data/s36i3p04.png Binary files differnew file mode 100644 index 0000000000..eb61b6f9a3 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s36i3p04.png diff --git a/vcl/qa/cppunit/png/data/s36n3p04.png b/vcl/qa/cppunit/png/data/s36n3p04.png Binary files differnew file mode 100644 index 0000000000..b38d179774 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s36n3p04.png diff --git a/vcl/qa/cppunit/png/data/s37i3p04.png b/vcl/qa/cppunit/png/data/s37i3p04.png Binary files differnew file mode 100644 index 0000000000..6e2b1e9b79 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s37i3p04.png diff --git a/vcl/qa/cppunit/png/data/s37n3p04.png b/vcl/qa/cppunit/png/data/s37n3p04.png Binary files differnew file mode 100644 index 0000000000..4d3054da51 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s37n3p04.png diff --git a/vcl/qa/cppunit/png/data/s38i3p04.png b/vcl/qa/cppunit/png/data/s38i3p04.png Binary files differnew file mode 100644 index 0000000000..a0a8a140ad --- /dev/null +++ b/vcl/qa/cppunit/png/data/s38i3p04.png diff --git a/vcl/qa/cppunit/png/data/s38n3p04.png b/vcl/qa/cppunit/png/data/s38n3p04.png Binary files differnew file mode 100644 index 0000000000..1233ed048e --- /dev/null +++ b/vcl/qa/cppunit/png/data/s38n3p04.png diff --git a/vcl/qa/cppunit/png/data/s39i3p04.png b/vcl/qa/cppunit/png/data/s39i3p04.png Binary files differnew file mode 100644 index 0000000000..04fee93eae --- /dev/null +++ b/vcl/qa/cppunit/png/data/s39i3p04.png diff --git a/vcl/qa/cppunit/png/data/s39n3p04.png b/vcl/qa/cppunit/png/data/s39n3p04.png Binary files differnew file mode 100644 index 0000000000..c750100d55 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s39n3p04.png diff --git a/vcl/qa/cppunit/png/data/s40i3p04.png b/vcl/qa/cppunit/png/data/s40i3p04.png Binary files differnew file mode 100644 index 0000000000..68f358b822 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s40i3p04.png diff --git a/vcl/qa/cppunit/png/data/s40n3p04.png b/vcl/qa/cppunit/png/data/s40n3p04.png Binary files differnew file mode 100644 index 0000000000..864b6b9673 --- /dev/null +++ b/vcl/qa/cppunit/png/data/s40n3p04.png diff --git a/vcl/qa/cppunit/png/data/tbbn0g04.png b/vcl/qa/cppunit/png/data/tbbn0g04.png Binary files differnew file mode 100644 index 0000000000..39a7050d27 --- /dev/null +++ b/vcl/qa/cppunit/png/data/tbbn0g04.png diff --git a/vcl/qa/cppunit/png/data/tbbn2c16.png b/vcl/qa/cppunit/png/data/tbbn2c16.png Binary files differnew file mode 100644 index 0000000000..dd3168e5c8 --- /dev/null +++ b/vcl/qa/cppunit/png/data/tbbn2c16.png diff --git a/vcl/qa/cppunit/png/data/tbbn3p08.png b/vcl/qa/cppunit/png/data/tbbn3p08.png Binary files differnew file mode 100644 index 0000000000..0ede3574db --- /dev/null +++ b/vcl/qa/cppunit/png/data/tbbn3p08.png diff --git a/vcl/qa/cppunit/png/data/tbgn2c16.png b/vcl/qa/cppunit/png/data/tbgn2c16.png Binary files differnew file mode 100644 index 0000000000..85cec395c0 --- /dev/null +++ b/vcl/qa/cppunit/png/data/tbgn2c16.png diff --git a/vcl/qa/cppunit/png/data/tbgn3p08.png b/vcl/qa/cppunit/png/data/tbgn3p08.png Binary files differnew file mode 100644 index 0000000000..8cf2e6fb6a --- /dev/null +++ b/vcl/qa/cppunit/png/data/tbgn3p08.png diff --git a/vcl/qa/cppunit/png/data/tbrn2c08.png b/vcl/qa/cppunit/png/data/tbrn2c08.png Binary files differnew file mode 100644 index 0000000000..5cca0d6210 --- /dev/null +++ b/vcl/qa/cppunit/png/data/tbrn2c08.png diff --git a/vcl/qa/cppunit/png/data/tbwn0g16.png b/vcl/qa/cppunit/png/data/tbwn0g16.png Binary files differnew file mode 100644 index 0000000000..99bdeed2b3 --- /dev/null +++ b/vcl/qa/cppunit/png/data/tbwn0g16.png diff --git a/vcl/qa/cppunit/png/data/tbwn3p08.png b/vcl/qa/cppunit/png/data/tbwn3p08.png Binary files differnew file mode 100644 index 0000000000..eacab7a144 --- /dev/null +++ b/vcl/qa/cppunit/png/data/tbwn3p08.png diff --git a/vcl/qa/cppunit/png/data/tbyn3p08.png b/vcl/qa/cppunit/png/data/tbyn3p08.png Binary files differnew file mode 100644 index 0000000000..656db0989a --- /dev/null +++ b/vcl/qa/cppunit/png/data/tbyn3p08.png diff --git a/vcl/qa/cppunit/png/data/tm3n3p02.png b/vcl/qa/cppunit/png/data/tm3n3p02.png Binary files differnew file mode 100644 index 0000000000..fb3ef1d0c5 --- /dev/null +++ b/vcl/qa/cppunit/png/data/tm3n3p02.png diff --git a/vcl/qa/cppunit/png/data/tp1n3p08.png b/vcl/qa/cppunit/png/data/tp1n3p08.png Binary files differnew file mode 100644 index 0000000000..a6c9f35a86 --- /dev/null +++ b/vcl/qa/cppunit/png/data/tp1n3p08.png diff --git a/vcl/qa/cppunit/png/data/xc1n0g08.png b/vcl/qa/cppunit/png/data/xc1n0g08.png Binary files differnew file mode 100644 index 0000000000..9404227370 --- /dev/null +++ b/vcl/qa/cppunit/png/data/xc1n0g08.png diff --git a/vcl/qa/cppunit/png/data/xc9n2c08.png b/vcl/qa/cppunit/png/data/xc9n2c08.png Binary files differnew file mode 100644 index 0000000000..b11c2a7b40 --- /dev/null +++ b/vcl/qa/cppunit/png/data/xc9n2c08.png diff --git a/vcl/qa/cppunit/png/data/xcrn0g04.png b/vcl/qa/cppunit/png/data/xcrn0g04.png Binary files differnew file mode 100644 index 0000000000..48abba193a --- /dev/null +++ b/vcl/qa/cppunit/png/data/xcrn0g04.png diff --git a/vcl/qa/cppunit/png/data/xcsn0g01.png b/vcl/qa/cppunit/png/data/xcsn0g01.png Binary files differnew file mode 100644 index 0000000000..9863a262ca --- /dev/null +++ b/vcl/qa/cppunit/png/data/xcsn0g01.png diff --git a/vcl/qa/cppunit/png/data/xd0n2c08.png b/vcl/qa/cppunit/png/data/xd0n2c08.png Binary files differnew file mode 100644 index 0000000000..2f001610a8 --- /dev/null +++ b/vcl/qa/cppunit/png/data/xd0n2c08.png diff --git a/vcl/qa/cppunit/png/data/xd3n2c08.png b/vcl/qa/cppunit/png/data/xd3n2c08.png Binary files differnew file mode 100644 index 0000000000..9e4a3ff7ac --- /dev/null +++ b/vcl/qa/cppunit/png/data/xd3n2c08.png diff --git a/vcl/qa/cppunit/png/data/xd9n2c08.png b/vcl/qa/cppunit/png/data/xd9n2c08.png Binary files differnew file mode 100644 index 0000000000..2c3b91aa4f --- /dev/null +++ b/vcl/qa/cppunit/png/data/xd9n2c08.png diff --git a/vcl/qa/cppunit/png/data/xdtn0g01.png b/vcl/qa/cppunit/png/data/xdtn0g01.png Binary files differnew file mode 100644 index 0000000000..1a81abef82 --- /dev/null +++ b/vcl/qa/cppunit/png/data/xdtn0g01.png diff --git a/vcl/qa/cppunit/png/data/xhdn0g08.png b/vcl/qa/cppunit/png/data/xhdn0g08.png Binary files differnew file mode 100644 index 0000000000..fcb8737fa2 --- /dev/null +++ b/vcl/qa/cppunit/png/data/xhdn0g08.png diff --git a/vcl/qa/cppunit/png/data/xlfn0g04.png b/vcl/qa/cppunit/png/data/xlfn0g04.png Binary files differnew file mode 100644 index 0000000000..d9ec53ed94 --- /dev/null +++ b/vcl/qa/cppunit/png/data/xlfn0g04.png diff --git a/vcl/qa/cppunit/png/data/xs1n0g01.png b/vcl/qa/cppunit/png/data/xs1n0g01.png Binary files differnew file mode 100644 index 0000000000..1817c5144f --- /dev/null +++ b/vcl/qa/cppunit/png/data/xs1n0g01.png diff --git a/vcl/qa/cppunit/png/data/xs2n0g01.png b/vcl/qa/cppunit/png/data/xs2n0g01.png Binary files differnew file mode 100644 index 0000000000..b8147f2a84 --- /dev/null +++ b/vcl/qa/cppunit/png/data/xs2n0g01.png diff --git a/vcl/qa/cppunit/png/data/xs4n0g01.png b/vcl/qa/cppunit/png/data/xs4n0g01.png Binary files differnew file mode 100644 index 0000000000..45237a1d29 --- /dev/null +++ b/vcl/qa/cppunit/png/data/xs4n0g01.png diff --git a/vcl/qa/cppunit/png/data/xs7n0g01.png b/vcl/qa/cppunit/png/data/xs7n0g01.png Binary files differnew file mode 100644 index 0000000000..3f307f14ea --- /dev/null +++ b/vcl/qa/cppunit/png/data/xs7n0g01.png diff --git a/vcl/qa/cppunit/png/data/z00n2c08.png b/vcl/qa/cppunit/png/data/z00n2c08.png Binary files differnew file mode 100644 index 0000000000..7669eb8385 --- /dev/null +++ b/vcl/qa/cppunit/png/data/z00n2c08.png diff --git a/vcl/qa/cppunit/png/data/z03n2c08.png b/vcl/qa/cppunit/png/data/z03n2c08.png Binary files differnew file mode 100644 index 0000000000..bfb10de8de --- /dev/null +++ b/vcl/qa/cppunit/png/data/z03n2c08.png diff --git a/vcl/qa/cppunit/png/data/z06n2c08.png b/vcl/qa/cppunit/png/data/z06n2c08.png Binary files differnew file mode 100644 index 0000000000..b90ebc10f5 --- /dev/null +++ b/vcl/qa/cppunit/png/data/z06n2c08.png diff --git a/vcl/qa/cppunit/png/data/z09n2c08.png b/vcl/qa/cppunit/png/data/z09n2c08.png Binary files differnew file mode 100644 index 0000000000..5f191a78ee --- /dev/null +++ b/vcl/qa/cppunit/png/data/z09n2c08.png |