[Libreoffice-commits] core.git: include/vcl svx/source vcl/qa vcl/source
Miklos Vajna (via logerrit)
logerrit at kemper.freedesktop.org
Wed Dec 2 09:15:19 UTC 2020
include/vcl/filter/PDFiumLibrary.hxx | 4 ++++
include/vcl/pdf/PDFBitmapType.hxx | 26 ++++++++++++++++++++++++++
svx/source/svdraw/svdpdf.cxx | 21 ++++++++++-----------
vcl/qa/cppunit/pdfexport/pdfexport.cxx | 12 ++++++------
vcl/source/pdf/PDFiumLibrary.cxx | 20 ++++++++++++++++++++
5 files changed, 66 insertions(+), 17 deletions(-)
New commits:
commit d8fe51f9a4d1669578c162d87a6e65125096d720
Author: Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Wed Dec 2 09:08:49 2020 +0100
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Wed Dec 2 10:14:27 2020 +0100
pdfium: add width/height/format wrappers for bitmap
Change-Id: Ic8c85c4224b89d1e7bb8ded1a11c5fd8139f5701
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107044
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
Tested-by: Jenkins
diff --git a/include/vcl/filter/PDFiumLibrary.hxx b/include/vcl/filter/PDFiumLibrary.hxx
index 497ef3e2d47e..6e952d4fc17b 100644
--- a/include/vcl/filter/PDFiumLibrary.hxx
+++ b/include/vcl/filter/PDFiumLibrary.hxx
@@ -32,6 +32,7 @@
#include <vcl/pdf/PDFAnnotationSubType.hxx>
#include <vcl/pdf/PDFPageObjectType.hxx>
#include <vcl/pdf/PDFSegmentType.hxx>
+#include <vcl/pdf/PDFBitmapType.hxx>
#include <fpdf_doc.h>
@@ -85,6 +86,9 @@ public:
void renderPageBitmap(PDFiumPage* pPage, int nStartX, int nStartY, int nSizeX, int nSizeY);
ConstScanline getBuffer();
int getStride();
+ int getWidth();
+ int getHeight();
+ PDFBitmapType getFormat();
};
class VCL_DLLPUBLIC PDFiumAnnotation final
diff --git a/include/vcl/pdf/PDFBitmapType.hxx b/include/vcl/pdf/PDFBitmapType.hxx
new file mode 100644
index 000000000000..fe5921276e87
--- /dev/null
+++ b/include/vcl/pdf/PDFBitmapType.hxx
@@ -0,0 +1,26 @@
+/* -*- 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/.
+ *
+ */
+
+#pragma once
+
+namespace vcl::pdf
+{
+enum class PDFBitmapType
+{
+ Unknown = 0,
+ Gray = 1,
+ BGR = 2,
+ BGRx = 3,
+ BGRA = 4,
+};
+
+} // namespace vcl::pdf
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/svdraw/svdpdf.cxx b/svx/source/svdraw/svdpdf.cxx
index 47ea46c62801..6f2f1de42f72 100644
--- a/svx/source/svdraw/svdpdf.cxx
+++ b/svx/source/svdraw/svdpdf.cxx
@@ -883,35 +883,34 @@ void ImpSdrPdfImport::ImportImage(std::unique_ptr<vcl::pdf::PDFiumPageObject> co
return;
}
- const int format = FPDFBitmap_GetFormat(bitmap->getPointer());
- if (format == FPDFBitmap_Unknown)
+ const vcl::pdf::PDFBitmapType format = bitmap->getFormat();
+ if (format == vcl::pdf::PDFBitmapType::Unknown)
{
SAL_WARN("sd.filter", "Failed to get IMAGE format");
return;
}
- const unsigned char* pBuf
- = static_cast<const unsigned char*>(FPDFBitmap_GetBuffer(bitmap->getPointer()));
- const int nWidth = FPDFBitmap_GetWidth(bitmap->getPointer());
- const int nHeight = FPDFBitmap_GetHeight(bitmap->getPointer());
- const int nStride = FPDFBitmap_GetStride(bitmap->getPointer());
+ const unsigned char* pBuf = bitmap->getBuffer();
+ const int nWidth = bitmap->getWidth();
+ const int nHeight = bitmap->getHeight();
+ const int nStride = bitmap->getStride();
BitmapEx aBitmap(Size(nWidth, nHeight), 24);
switch (format)
{
- case FPDFBitmap_BGR:
+ case vcl::pdf::PDFBitmapType::BGR:
ReadRawDIB(aBitmap, pBuf, ScanlineFormat::N24BitTcBgr, nHeight, nStride);
break;
- case FPDFBitmap_BGRx:
+ case vcl::pdf::PDFBitmapType::BGRx:
ReadRawDIB(aBitmap, pBuf, ScanlineFormat::N32BitTcRgba, nHeight, nStride);
break;
- case FPDFBitmap_BGRA:
+ case vcl::pdf::PDFBitmapType::BGRA:
ReadRawDIB(aBitmap, pBuf, ScanlineFormat::N32BitTcBgra, nHeight, nStride);
break;
default:
SAL_WARN("sd.filter", "Got IMAGE width: " << nWidth << ", height: " << nHeight
<< ", stride: " << nStride
- << ", format: " << format);
+ << ", format: " << static_cast<int>(format));
break;
}
diff --git a/vcl/qa/cppunit/pdfexport/pdfexport.cxx b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
index eaf905986928..7af85573be40 100644
--- a/vcl/qa/cppunit/pdfexport/pdfexport.cxx
+++ b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
@@ -1503,8 +1503,8 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf128630)
std::unique_ptr<vcl::pdf::PDFiumBitmap> pBitmap = pPageObject->getImageBitmap();
CPPUNIT_ASSERT(pBitmap);
- int nWidth = FPDFBitmap_GetWidth(pBitmap->getPointer());
- int nHeight = FPDFBitmap_GetHeight(pBitmap->getPointer());
+ int nWidth = pBitmap->getWidth();
+ int nHeight = pBitmap->getHeight();
// Without the accompanying fix in place, this test would have failed with:
// assertion failed
// - Expression: nWidth != nHeight
@@ -1845,8 +1845,8 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest, testReduceSmallImage)
// Make sure we don't scale down a tiny bitmap.
std::unique_ptr<vcl::pdf::PDFiumBitmap> pBitmap = pPageObject->getImageBitmap();
CPPUNIT_ASSERT(pBitmap);
- int nWidth = FPDFBitmap_GetWidth(pBitmap->getPointer());
- int nHeight = FPDFBitmap_GetHeight(pBitmap->getPointer());
+ int nWidth = pBitmap->getWidth();
+ int nHeight = pBitmap->getHeight();
// Without the accompanying fix in place, this test would have failed with:
// - Expected: 16
// - Actual : 6
@@ -1900,8 +1900,8 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest, testReduceImage)
// Make sure we don't scale down a bitmap.
std::unique_ptr<vcl::pdf::PDFiumBitmap> pBitmap = pPageObject->getImageBitmap();
CPPUNIT_ASSERT(pBitmap);
- int nWidth = FPDFBitmap_GetWidth(pBitmap->getPointer());
- int nHeight = FPDFBitmap_GetHeight(pBitmap->getPointer());
+ int nWidth = pBitmap->getWidth();
+ int nHeight = pBitmap->getHeight();
// Without the accompanying fix in place, this test would have failed with:
// - Expected: 160
// - Actual : 6
diff --git a/vcl/source/pdf/PDFiumLibrary.cxx b/vcl/source/pdf/PDFiumLibrary.cxx
index 0952c9a5d3e8..00a3167bfa36 100644
--- a/vcl/source/pdf/PDFiumLibrary.cxx
+++ b/vcl/source/pdf/PDFiumLibrary.cxx
@@ -51,6 +51,17 @@ static_assert(static_cast<int>(vcl::pdf::PDFSegmentType::Bezierto) == FPDF_SEGME
static_assert(static_cast<int>(vcl::pdf::PDFSegmentType::Moveto) == FPDF_SEGMENT_MOVETO,
"PDFSegmentType::Moveto value mismatch");
+static_assert(static_cast<int>(vcl::pdf::PDFBitmapType::Unknown) == FPDFBitmap_Unknown,
+ "PDFBitmapType::Unknown value mismatch");
+static_assert(static_cast<int>(vcl::pdf::PDFBitmapType::Gray) == FPDFBitmap_Gray,
+ "PDFBitmapType::Gray value mismatch");
+static_assert(static_cast<int>(vcl::pdf::PDFBitmapType::BGR) == FPDFBitmap_BGR,
+ "PDFBitmapType::BGR value mismatch");
+static_assert(static_cast<int>(vcl::pdf::PDFBitmapType::BGRx) == FPDFBitmap_BGRx,
+ "PDFBitmapType::BGRx value mismatch");
+static_assert(static_cast<int>(vcl::pdf::PDFBitmapType::BGRA) == FPDFBitmap_BGRA,
+ "PDFBitmapType::BGRA value mismatch");
+
namespace
{
/// Callback class to be used with FPDF_SaveWithVersion().
@@ -650,6 +661,15 @@ ConstScanline PDFiumBitmap::getBuffer()
int PDFiumBitmap::getStride() { return FPDFBitmap_GetStride(mpBitmap); }
+int PDFiumBitmap::getWidth() { return FPDFBitmap_GetWidth(mpBitmap); }
+
+int PDFiumBitmap::getHeight() { return FPDFBitmap_GetHeight(mpBitmap); }
+
+PDFBitmapType PDFiumBitmap::getFormat()
+{
+ return static_cast<PDFBitmapType>(FPDFBitmap_GetFormat(mpBitmap));
+}
+
PDFiumAnnotation::PDFiumAnnotation(FPDF_ANNOTATION pAnnotation)
: mpAnnotation(pAnnotation)
{
More information about the Libreoffice-commits
mailing list