Change CFX_DIBitmap::MultiplyAlpha() to take a float

Some MultiplyAlpha() methods take a float, while others take an integer.
It is too easy to mix them up, so change CFX_DIBitmap::MultiplyAlpha()
to take a float to avoid inconsistencies.

Change-Id: I32041bbbe3a16b19e8eca4413677c0096a93e69e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/115452
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 42ec4a0..6584e06 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -314,7 +314,7 @@
                      rect);
   bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_Format::k8bppMask);
   bitmap_device1.GetBitmap()->MultiplyAlphaMask(bitmap_device2.GetBitmap());
-  bitmap_device1.GetBitmap()->MultiplyAlpha(255);
+  bitmap_device1.GetBitmap()->MultiplyAlpha(1.0f);
   m_pRenderStatus->GetRenderDevice()->SetDIBitsWithBlend(
       bitmap_device1.GetBitmap(), rect.left, rect.top, m_BlendType);
   return false;
@@ -365,7 +365,7 @@
 #endif
   bitmap_device1.GetBitmap()->MultiplyAlphaMask(bitmap_device2.GetBitmap());
   if (m_BitmapAlpha < 255)
-    bitmap_device1.GetBitmap()->MultiplyAlpha(m_BitmapAlpha);
+    bitmap_device1.GetBitmap()->MultiplyAlpha(m_BitmapAlpha / 255.0f);
   m_pRenderStatus->GetRenderDevice()->SetDIBitsWithBlend(
       bitmap_device1.GetBitmap(), rect.left, rect.top, m_BlendType);
   return false;
@@ -562,7 +562,7 @@
         m_FillArgb);
   } else {
     if (m_BitmapAlpha != 255)
-      pBitmap->MultiplyAlpha(m_BitmapAlpha);
+      pBitmap->MultiplyAlpha(m_BitmapAlpha / 255.0f);
     m_Result = m_pRenderStatus->GetRenderDevice()->SetDIBitsWithBlend(
         pBitmap, m_pTransformer->result().left, m_pTransformer->result().top,
         m_BlendType);
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 0830b85..de5fa6e 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -1218,7 +1218,7 @@
                                  FXDIB_ResampleOptions(), &dummy);
           return;
         }
-        pDIBitmap->MultiplyAlpha(bitmap_alpha);
+        pDIBitmap->MultiplyAlpha(bitmap_alpha / 255.0f);
       }
       if (m_pDevice->SetDIBits(pDIBitmap, left, top)) {
         return;
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index 9eda66e..b123566 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -1131,7 +1131,7 @@
 }
 
 bool CFX_AggDeviceDriver::MultiplyAlpha(float alpha) {
-  return m_pBitmap->MultiplyAlpha(static_cast<int32_t>(alpha * 255));
+  return m_pBitmap->MultiplyAlpha(alpha);
 }
 
 bool CFX_AggDeviceDriver::MultiplyAlphaMask(
diff --git a/core/fxge/dib/cfx_dibitmap.cpp b/core/fxge/dib/cfx_dibitmap.cpp
index f9793fc..2fc6d44 100644
--- a/core/fxge/dib/cfx_dibitmap.cpp
+++ b/core/fxge/dib/cfx_dibitmap.cpp
@@ -455,7 +455,7 @@
   return true;
 }
 
-bool CFX_DIBitmap::MultiplyAlpha(int alpha) {
+bool CFX_DIBitmap::MultiplyAlpha(float alpha) {
   if (!m_pBuffer)
     return false;
 
@@ -467,19 +467,21 @@
       MultiplyAlpha(alpha);
       break;
     case FXDIB_Format::k8bppMask: {
+      const int bitmap_alpha = static_cast<int>(alpha * 255);
       for (int row = 0; row < m_Height; row++) {
         uint8_t* scan_line = m_pBuffer.Get() + row * m_Pitch;
         for (int col = 0; col < m_Width; col++) {
-          scan_line[col] = scan_line[col] * alpha / 255;
+          scan_line[col] = scan_line[col] * bitmap_alpha / 255;
         }
       }
       break;
     }
     case FXDIB_Format::kArgb: {
+      const int bitmap_alpha = static_cast<int>(alpha * 255);
       for (int row = 0; row < m_Height; row++) {
         uint8_t* scan_line = m_pBuffer.Get() + row * m_Pitch + 3;
         for (int col = 0; col < m_Width; col++) {
-          *scan_line = (*scan_line) * alpha / 255;
+          *scan_line = (*scan_line) * bitmap_alpha / 255;
           scan_line += 4;
         }
       }
diff --git a/core/fxge/dib/cfx_dibitmap.h b/core/fxge/dib/cfx_dibitmap.h
index 4dbe64a..29315df 100644
--- a/core/fxge/dib/cfx_dibitmap.h
+++ b/core/fxge/dib/cfx_dibitmap.h
@@ -65,7 +65,7 @@
   bool SetUniformOpaqueAlpha();
 
   // TODO(crbug.com/pdfium/2007): Migrate callers to `CFX_RenderDevice`.
-  bool MultiplyAlpha(int alpha);
+  bool MultiplyAlpha(float alpha);
   bool MultiplyAlphaMask(const RetainPtr<const CFX_DIBBase>& pSrcBitmap);
 
   bool TransferBitmap(int dest_left,
diff --git a/core/fxge/dib/cfx_imagerenderer.cpp b/core/fxge/dib/cfx_imagerenderer.cpp
index 5abd96c..592124d 100644
--- a/core/fxge/dib/cfx_imagerenderer.cpp
+++ b/core/fxge/dib/cfx_imagerenderer.cpp
@@ -108,7 +108,7 @@
                              BlendMode::kNormal, m_pClipRgn, m_bRgbByteOrder);
   } else {
     if (m_BitmapAlpha != 255)
-      pBitmap->MultiplyAlpha(m_BitmapAlpha);
+      pBitmap->MultiplyAlpha(m_BitmapAlpha / 255.0f);
     m_pDevice->CompositeBitmap(
         m_pTransformer->result().left, m_pTransformer->result().top,
         pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap, 0, 0,