Move PNG encoding logic to helper in pdfium_test_write_helper.cc The function WriteImages() had a large switch statement for determining which PNG encoding to use depending on the format of a bitmap. This logic can be a separate function that can also be used by WritePng(). Change-Id: Ie6148ca560d09b1549feee016eb49055d49abc04 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/56711 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/samples/pdfium_test_write_helper.cc b/samples/pdfium_test_write_helper.cc index fac1872..f18a791 100644 --- a/samples/pdfium_test_write_helper.cc +++ b/samples/pdfium_test_write_helper.cc
@@ -130,6 +130,40 @@ return ""; } +bool EncodePng(const unsigned char* buffer, + int width, + int height, + int stride, + int format, + std::vector<unsigned char>* png_encoding) { + bool ret = false; + switch (format) { + case FPDFBitmap_Unknown: + ret = false; + break; + case FPDFBitmap_Gray: + ret = image_diff_png::EncodeGrayPNG(buffer, width, height, stride, + png_encoding); + break; + case FPDFBitmap_BGR: + ret = image_diff_png::EncodeBGRPNG(buffer, width, height, stride, + png_encoding); + break; + case FPDFBitmap_BGRx: + ret = image_diff_png::EncodeBGRAPNG(buffer, width, height, stride, true, + png_encoding); + break; + case FPDFBitmap_BGRA: + ret = image_diff_png::EncodeBGRAPNG(buffer, width, height, stride, false, + png_encoding); + break; + default: + NOTREACHED(); + } + + return ret; +} + #ifdef _WIN32 int CALLBACK EnhMetaFileProc(HDC hdc, HANDLETABLE* handle_table, @@ -354,8 +388,9 @@ std::vector<unsigned char> png_encoding; const auto* buffer = static_cast<const unsigned char*>(buffer_void); - if (!image_diff_png::EncodeBGRAPNG(buffer, width, height, stride, false, - &png_encoding)) { + + if (!EncodePng(buffer, width, height, stride, FPDFBitmap_BGRA, + &png_encoding)) { fprintf(stderr, "Failed to convert bitmap to PNG\n"); return ""; } @@ -599,28 +634,8 @@ int width = FPDFBitmap_GetWidth(bitmap.get()); int height = FPDFBitmap_GetHeight(bitmap.get()); int stride = FPDFBitmap_GetStride(bitmap.get()); - bool ret = false; - switch (format) { - case FPDFBitmap_Gray: - ret = image_diff_png::EncodeGrayPNG(buffer, width, height, stride, - &png_encoding); - break; - case FPDFBitmap_BGR: - ret = image_diff_png::EncodeBGRPNG(buffer, width, height, stride, - &png_encoding); - break; - case FPDFBitmap_BGRx: - ret = image_diff_png::EncodeBGRAPNG(buffer, width, height, stride, true, - &png_encoding); - break; - case FPDFBitmap_BGRA: - ret = image_diff_png::EncodeBGRAPNG(buffer, width, height, stride, - false, &png_encoding); - break; - default: - NOTREACHED(); - } - if (!ret) { + + if (!EncodePng(buffer, width, height, stride, format, &png_encoding)) { fprintf(stderr, "Failed to convert image object #%d on page #%d to png.\n", i + 1, page_num + 1);