[Skia] Enable FPDFEditEmbedderTest.GetRenderedBitmapHandlesSMask
FPDFBitmapFromCFXDIBitmap() only handles turning an unpremultiplied
CFX_DIBitmap into FPDF_Bitmap. However, the CFX_DIBitmap used by the
render device gets premultiplied when Skia is enabled. To get the
correct FPDF_Bitmap, this CL reverts the `result_bitmap` back to the
unpremultiplied format before calling FPDFBitmapFromCFXDIBitmap().
This CL fixes FPDFEditEmbedderTest.GetRenderedBitmapHandlesSMask. The
Skia rendering results are attached in [1].
[1] https://crbug.com/pdfium/1865#c3
Bug: pdfium:1865
Change-Id: Ieddad4937c382c3098367479387fa35aa832c58d
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/95995
Commit-Queue: Nigi <nigi@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp
index bbcfcd5..d4f5d05 100644
--- a/fpdfsdk/fpdf_edit_embeddertest.cpp
+++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -3947,14 +3947,7 @@
UnloadPage(page);
}
-// TODO(crbug.com/pdfium/11): Fix this test and enable.
-#if defined(_SKIA_SUPPORT_)
-#define MAYBE_GetRenderedBitmapHandlesSMask \
- DISABLED_GetRenderedBitmapHandlesSMask
-#else
-#define MAYBE_GetRenderedBitmapHandlesSMask GetRenderedBitmapHandlesSMask
-#endif
-TEST_F(FPDFEditEmbedderTest, MAYBE_GetRenderedBitmapHandlesSMask) {
+TEST_F(FPDFEditEmbedderTest, GetRenderedBitmapHandlesSMask) {
ASSERT_TRUE(OpenDocument("matte.pdf"));
FPDF_PAGE page = LoadPage(0);
ASSERT_TRUE(page);
@@ -3962,6 +3955,17 @@
constexpr int kExpectedObjects = 4;
ASSERT_EQ(kExpectedObjects, FPDFPage_CountObjects(page));
+ const char* smask_checksum = []() {
+ if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
+ return "5ddf871ab737746b1b8390f0bc4ec52c";
+ return "5a3ae4a660ce919e29c42ec2258142f1";
+ }();
+ const char* no_smask_checksum = []() {
+ if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
+ return "6bb3b5bd93e26f4c2e52db64a1f57686";
+ return "67504e83f5d78214ea00efc19082c5c1";
+ }();
+
for (int i = 0; i < kExpectedObjects; ++i) {
FPDF_PAGEOBJECT obj = FPDFPage_GetObject(page, i);
ASSERT_EQ(FPDF_PAGEOBJ_IMAGE, FPDFPageObj_GetType(obj));
@@ -3970,9 +3974,9 @@
ASSERT_TRUE(bitmap);
EXPECT_EQ(FPDFBitmap_BGRA, FPDFBitmap_GetFormat(bitmap.get()));
if (i == 0)
- CompareBitmap(bitmap.get(), 40, 60, "5a3ae4a660ce919e29c42ec2258142f1");
+ CompareBitmap(bitmap.get(), 40, 60, smask_checksum);
else
- CompareBitmap(bitmap.get(), 40, 60, "67504e83f5d78214ea00efc19082c5c1");
+ CompareBitmap(bitmap.get(), 40, 60, no_smask_checksum);
}
UnloadPage(page);
diff --git a/fpdfsdk/fpdf_editimg.cpp b/fpdfsdk/fpdf_editimg.cpp
index 5a40c7b..617a14b 100644
--- a/fpdfsdk/fpdf_editimg.cpp
+++ b/fpdfsdk/fpdf_editimg.cpp
@@ -255,6 +255,10 @@
if (!renderer.GetResult())
return nullptr;
+#if defined(_SKIA_SUPPORT_)
+ result_bitmap->UnPreMultiply();
+#endif
+
// Caller takes ownership.
return FPDFBitmapFromCFXDIBitmap(result_bitmap.Leak());
}