Change CPDF_RenderStatus::CompositeDIBitmap() to take a float alpha

Convert another method and its caller to use float alpha values.

Change-Id: I6f6753aee3188a9ad7ec27a9f76550b2509a427e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/115453
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 6db5359..ef33f9f 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -457,9 +457,9 @@
   RetainPtr<CFX_DIBitmap> pStretched = m_pDIBBase->StretchTo(
       dest_width, dest_height, m_ResampleOptions, &dest_clip);
   if (pStretched) {
-    m_pRenderStatus->CompositeDIBitmap(pStretched, dest_rect.left,
-                                       dest_rect.top, m_FillArgb, m_BitmapAlpha,
-                                       m_BlendType, CPDF_Transparency());
+    m_pRenderStatus->CompositeDIBitmap(
+        pStretched, dest_rect.left, dest_rect.top, m_FillArgb,
+        m_BitmapAlpha / 255.0f, m_BlendType, CPDF_Transparency());
   }
   return false;
 }
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index de5fa6e..0ba2913 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -699,8 +699,8 @@
     bitmap_device.GetBitmap()->UnPreMultiply();
   }
 #endif
-  CompositeDIBitmap(bitmap_device.GetBitmap(), rect.left, rect.top, 0, 255,
-                    blend_type, transparency);
+  CompositeDIBitmap(bitmap_device.GetBitmap(), rect.left, rect.top,
+                    /*mask_argb=*/0, /*alpha=*/1.0f, blend_type, transparency);
   return true;
 }
 
@@ -1147,7 +1147,8 @@
   if (!pScreen)
     return;
 
-  CompositeDIBitmap(pScreen, clip_box.left, clip_box.top, 0, 255,
+  constexpr FX_ARGB kMask = 0;
+  CompositeDIBitmap(pScreen, clip_box.left, clip_box.top, kMask, /*alpha=*/1.0f,
                     BlendMode::kNormal, CPDF_Transparency());
 }
 
@@ -1202,32 +1203,33 @@
     int left,
     int top,
     FX_ARGB mask_argb,
-    int bitmap_alpha,
+    float alpha,
     BlendMode blend_mode,
     const CPDF_Transparency& transparency) {
   CHECK(pDIBitmap);
 
   if (blend_mode == BlendMode::kNormal) {
     if (!pDIBitmap->IsMaskFormat()) {
-      if (bitmap_alpha < 255) {
+      if (alpha != 1.0f) {
         if (CFX_DefaultRenderDevice::UseSkiaRenderer()) {
           std::unique_ptr<CFX_ImageRenderer> dummy;
-          CFX_Matrix m = CFX_RenderDevice::GetFlipMatrix(
+          CFX_Matrix matrix = CFX_RenderDevice::GetFlipMatrix(
               pDIBitmap->GetWidth(), pDIBitmap->GetHeight(), left, top);
-          m_pDevice->StartDIBits(pDIBitmap, bitmap_alpha, 0, m,
+          const int bitmap_alpha = FXSYS_roundf(alpha * 255);
+          m_pDevice->StartDIBits(pDIBitmap, bitmap_alpha, /*color=*/0, matrix,
                                  FXDIB_ResampleOptions(), &dummy);
           return;
         }
-        pDIBitmap->MultiplyAlpha(bitmap_alpha / 255.0f);
+        pDIBitmap->MultiplyAlpha(alpha);
       }
       if (m_pDevice->SetDIBits(pDIBitmap, left, top)) {
         return;
       }
     } else {
       uint32_t fill_argb = m_Options.TranslateColor(mask_argb);
-      if (bitmap_alpha < 255) {
+      if (alpha != 1.0f) {
         uint8_t* fill_argb8 = reinterpret_cast<uint8_t*>(&fill_argb);
-        fill_argb8[3] *= bitmap_alpha / 255;
+        fill_argb8[3] *= FXSYS_roundf(alpha * 255) / 255;
       }
       if (m_pDevice->SetBitMask(pDIBitmap, left, top, fill_argb)) {
         return;
diff --git a/core/fpdfapi/render/cpdf_renderstatus.h b/core/fpdfapi/render/cpdf_renderstatus.h
index 81fd4dd..622d8a0 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.h
+++ b/core/fpdfapi/render/cpdf_renderstatus.h
@@ -117,7 +117,7 @@
                          int left,
                          int top,
                          FX_ARGB mask_argb,
-                         int bitmap_alpha,
+                         float alpha,
                          BlendMode blend_mode,
                          const CPDF_Transparency& transparency);