Add CFX_DIBBase::GetPaletteSpan().

Use it in place of GetPaletteData() in many places.

Change-Id: Ie08e1df7e8a12bfce7900b515e29b9465f5fe0fa
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/75234
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_dib.cpp b/core/fpdfapi/page/cpdf_dib.cpp
index 65c7eeb..bedfd4d 100644
--- a/core/fpdfapi/page/cpdf_dib.cpp
+++ b/core/fpdfapi/page/cpdf_dib.cpp
@@ -1120,12 +1120,13 @@
 
     uint8_t* pDestPixel = m_pMaskedLine.get();
     const uint8_t* pSrcPixel = m_pLineBuf.get();
+    pdfium::span<const uint32_t> palette = GetPaletteSpan();
     for (int col = 0; col < m_Width; col++) {
       uint8_t index = *pSrcPixel++;
       if (HasPalette()) {
-        *pDestPixel++ = FXARGB_B(GetPaletteData()[index]);
-        *pDestPixel++ = FXARGB_G(GetPaletteData()[index]);
-        *pDestPixel++ = FXARGB_R(GetPaletteData()[index]);
+        *pDestPixel++ = FXARGB_B(palette[index]);
+        *pDestPixel++ = FXARGB_G(palette[index]);
+        *pDestPixel++ = FXARGB_R(palette[index]);
       } else {
         *pDestPixel++ = index;
         *pDestPixel++ = index;
@@ -1261,8 +1262,8 @@
       reset_argb = 0xFFFFFFFF;
     }
   } else if (HasPalette() && dest_Bpp != 1) {
-    reset_argb = GetPaletteData()[0];
-    set_argb = GetPaletteData()[1];
+    reset_argb = GetPaletteSpan()[0];
+    set_argb = GetPaletteSpan()[1];
   }
   for (int i = 0; i < clip_width; i++) {
     uint32_t src_x = (clip_left + i) * src_width / dest_width;
@@ -1306,6 +1307,7 @@
     pSrcLine = m_pLineBuf.get();
   }
   if (m_bColorKey) {
+    pdfium::span<const uint32_t> palette = GetPaletteSpan();
     for (int i = 0; i < clip_width; i++) {
       uint32_t src_x = (clip_left + i) * src_width / dest_width;
       if (bFlipX) {
@@ -1315,9 +1317,9 @@
       uint8_t* pDestPixel = dest_scan + i * 4;
       uint8_t index = pSrcLine[src_x];
       if (HasPalette()) {
-        *pDestPixel++ = FXARGB_B(GetPaletteData()[index]);
-        *pDestPixel++ = FXARGB_G(GetPaletteData()[index]);
-        *pDestPixel++ = FXARGB_R(GetPaletteData()[index]);
+        *pDestPixel++ = FXARGB_B(palette[index]);
+        *pDestPixel++ = FXARGB_G(palette[index]);
+        *pDestPixel++ = FXARGB_R(palette[index]);
       } else {
         *pDestPixel++ = index;
         *pDestPixel++ = index;
@@ -1330,6 +1332,8 @@
     }
     return;
   }
+
+  pdfium::span<const uint32_t> palette = GetPaletteSpan();
   for (int i = 0; i < clip_width; i++) {
     uint32_t src_x = (clip_left + i) * src_width / dest_width;
     if (bFlipX)
@@ -1340,7 +1344,7 @@
       dest_scan[i] = index;
     } else {
       int dest_pos = i * dest_Bpp;
-      FX_ARGB argb = GetPaletteData()[index];
+      FX_ARGB argb = palette[index];
       dest_scan[dest_pos] = FXARGB_B(argb);
       dest_scan[dest_pos + 1] = FXARGB_G(argb);
       dest_scan[dest_pos + 2] = FXARGB_R(argb);
@@ -1461,11 +1465,11 @@
 uint32_t CPDF_DIB::Get1BitSetValue() const {
   if (m_CompData[0].m_ColorKeyMax == 1)
     return 0x00000000;
-  return HasPalette() ? GetPaletteData()[1] : 0xFFFFFFFF;
+  return HasPalette() ? GetPaletteSpan()[1] : 0xFFFFFFFF;
 }
 
 uint32_t CPDF_DIB::Get1BitResetValue() const {
   if (m_CompData[0].m_ColorKeyMin == 0)
     return 0x00000000;
-  return HasPalette() ? GetPaletteData()[0] : 0xFF000000;
+  return HasPalette() ? GetPaletteSpan()[0] : 0xFF000000;
 }
diff --git a/core/fpdfapi/page/cpdf_transferfuncdib.cpp b/core/fpdfapi/page/cpdf_transferfuncdib.cpp
index 4f03127..0bd1c59 100644
--- a/core/fpdfapi/page/cpdf_transferfuncdib.cpp
+++ b/core/fpdfapi/page/cpdf_transferfuncdib.cpp
@@ -87,11 +87,11 @@
       break;
     }
     case FXDIB_8bppRgb: {
-      const FX_ARGB* pPal = m_pSrc->GetPaletteData();
+      pdfium::span<const uint32_t> src_palette = m_pSrc->GetPaletteSpan();
       int index = 0;
       for (int i = 0; i < m_Width; i++) {
-        if (pPal) {
-          FX_ARGB src_argb = pPal[*src_buf];
+        if (m_pSrc->HasPalette()) {
+          FX_ARGB src_argb = src_palette[*src_buf];
           (*dest_buf)[index++] = m_RampB[FXARGB_R(src_argb)];
           (*dest_buf)[index++] = m_RampG[FXARGB_G(src_argb)];
           (*dest_buf)[index++] = m_RampR[FXARGB_B(src_argb)];
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index d4db32f..6bbf5ec 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -980,7 +980,7 @@
   int index = 0;
   if (m_pDevice->HasPalette()) {
     for (int i = 0; i < 2; i++) {
-      if (m_pDevice->GetPaletteData()[i] == m_Color)
+      if (m_pDevice->GetPaletteSpan()[i] == m_Color)
         index = i;
     }
   } else {
diff --git a/core/fxge/dib/cfx_dibbase.cpp b/core/fxge/dib/cfx_dibbase.cpp
index b50ec24..bb31b80 100644
--- a/core/fxge/dib/cfx_dibbase.cpp
+++ b/core/fxge/dib/cfx_dibbase.cpp
@@ -143,7 +143,7 @@
                                 const RetainPtr<CFX_DIBBase>& pSrcBitmap,
                                 int src_left,
                                 int src_top) {
-  const uint32_t* src_plt = pSrcBitmap->GetPaletteData();
+  pdfium::span<const uint32_t> src_palette = pSrcBitmap->GetPaletteSpan();
   uint8_t gray[2];
   uint8_t reset_r;
   uint8_t reset_g;
@@ -153,18 +153,18 @@
   uint8_t set_b;
   if (pSrcBitmap->IsCmykImage()) {
     std::tie(reset_r, reset_g, reset_b) = AdobeCMYK_to_sRGB1(
-        FXSYS_GetCValue(src_plt[0]), FXSYS_GetMValue(src_plt[0]),
-        FXSYS_GetYValue(src_plt[0]), FXSYS_GetKValue(src_plt[0]));
+        FXSYS_GetCValue(src_palette[0]), FXSYS_GetMValue(src_palette[0]),
+        FXSYS_GetYValue(src_palette[0]), FXSYS_GetKValue(src_palette[0]));
     std::tie(set_r, set_g, set_b) = AdobeCMYK_to_sRGB1(
-        FXSYS_GetCValue(src_plt[1]), FXSYS_GetMValue(src_plt[1]),
-        FXSYS_GetYValue(src_plt[1]), FXSYS_GetKValue(src_plt[1]));
+        FXSYS_GetCValue(src_palette[1]), FXSYS_GetMValue(src_palette[1]),
+        FXSYS_GetYValue(src_palette[1]), FXSYS_GetKValue(src_palette[1]));
   } else {
-    reset_r = FXARGB_R(src_plt[0]);
-    reset_g = FXARGB_G(src_plt[0]);
-    reset_b = FXARGB_B(src_plt[0]);
-    set_r = FXARGB_R(src_plt[1]);
-    set_g = FXARGB_G(src_plt[1]);
-    set_b = FXARGB_B(src_plt[1]);
+    reset_r = FXARGB_R(src_palette[0]);
+    reset_g = FXARGB_G(src_palette[0]);
+    reset_b = FXARGB_B(src_palette[0]);
+    set_r = FXARGB_R(src_palette[1]);
+    set_g = FXARGB_G(src_palette[1]);
+    set_b = FXARGB_B(src_palette[1]);
   }
   gray[0] = FXRGB2GRAY(reset_r, reset_g, reset_b);
   gray[1] = FXRGB2GRAY(set_r, set_g, set_b);
@@ -188,7 +188,7 @@
                                 const RetainPtr<CFX_DIBBase>& pSrcBitmap,
                                 int src_left,
                                 int src_top) {
-  const uint32_t* src_plt = pSrcBitmap->GetPaletteData();
+  pdfium::span<const uint32_t> src_palette = pSrcBitmap->GetPaletteSpan();
   uint8_t gray[256];
   if (pSrcBitmap->IsCmykImage()) {
     uint8_t r;
@@ -196,14 +196,14 @@
     uint8_t b;
     for (size_t i = 0; i < pdfium::size(gray); ++i) {
       std::tie(r, g, b) = AdobeCMYK_to_sRGB1(
-          FXSYS_GetCValue(src_plt[i]), FXSYS_GetMValue(src_plt[i]),
-          FXSYS_GetYValue(src_plt[i]), FXSYS_GetKValue(src_plt[i]));
+          FXSYS_GetCValue(src_palette[i]), FXSYS_GetMValue(src_palette[i]),
+          FXSYS_GetYValue(src_palette[i]), FXSYS_GetKValue(src_palette[i]));
       gray[i] = FXRGB2GRAY(r, g, b);
     }
   } else {
     for (size_t i = 0; i < pdfium::size(gray); ++i) {
-      gray[i] = FXRGB2GRAY(FXARGB_R(src_plt[i]), FXARGB_G(src_plt[i]),
-                           FXARGB_B(src_plt[i]));
+      gray[i] = FXRGB2GRAY(FXARGB_R(src_palette[i]), FXARGB_G(src_palette[i]),
+                           FXARGB_B(src_palette[i]));
     }
   }
 
@@ -424,28 +424,28 @@
                                int src_left,
                                int src_top) {
   int comps = GetCompsFromFormat(dest_format);
-  const uint32_t* src_plt = pSrcBitmap->GetPaletteData();
+  pdfium::span<const uint32_t> src_palette = pSrcBitmap->GetPaletteSpan();
   uint32_t plt[2];
   uint8_t* bgr_ptr = reinterpret_cast<uint8_t*>(plt);
   if (pSrcBitmap->IsCmykImage()) {
-    plt[0] = FXCMYK_TODIB(src_plt[0]);
-    plt[1] = FXCMYK_TODIB(src_plt[1]);
+    plt[0] = FXCMYK_TODIB(src_palette[0]);
+    plt[1] = FXCMYK_TODIB(src_palette[1]);
   } else {
-    bgr_ptr[0] = FXARGB_B(src_plt[0]);
-    bgr_ptr[1] = FXARGB_G(src_plt[0]);
-    bgr_ptr[2] = FXARGB_R(src_plt[0]);
-    bgr_ptr[3] = FXARGB_B(src_plt[1]);
-    bgr_ptr[4] = FXARGB_G(src_plt[1]);
-    bgr_ptr[5] = FXARGB_R(src_plt[1]);
+    bgr_ptr[0] = FXARGB_B(src_palette[0]);
+    bgr_ptr[1] = FXARGB_G(src_palette[0]);
+    bgr_ptr[2] = FXARGB_R(src_palette[0]);
+    bgr_ptr[3] = FXARGB_B(src_palette[1]);
+    bgr_ptr[4] = FXARGB_G(src_palette[1]);
+    bgr_ptr[5] = FXARGB_R(src_palette[1]);
   }
 
   if (pSrcBitmap->IsCmykImage()) {
     std::tie(bgr_ptr[2], bgr_ptr[1], bgr_ptr[0]) = AdobeCMYK_to_sRGB1(
-        FXSYS_GetCValue(src_plt[0]), FXSYS_GetMValue(src_plt[0]),
-        FXSYS_GetYValue(src_plt[0]), FXSYS_GetKValue(src_plt[0]));
+        FXSYS_GetCValue(src_palette[0]), FXSYS_GetMValue(src_palette[0]),
+        FXSYS_GetYValue(src_palette[0]), FXSYS_GetKValue(src_palette[0]));
     std::tie(bgr_ptr[5], bgr_ptr[4], bgr_ptr[3]) = AdobeCMYK_to_sRGB1(
-        FXSYS_GetCValue(src_plt[1]), FXSYS_GetMValue(src_plt[1]),
-        FXSYS_GetYValue(src_plt[1]), FXSYS_GetKValue(src_plt[1]));
+        FXSYS_GetCValue(src_palette[1]), FXSYS_GetMValue(src_palette[1]),
+        FXSYS_GetYValue(src_palette[1]), FXSYS_GetKValue(src_palette[1]));
   }
 
   for (int row = 0; row < height; ++row) {
@@ -468,14 +468,14 @@
                                int src_left,
                                int src_top) {
   int comps = GetCompsFromFormat(dest_format);
-  const uint32_t* src_plt = pSrcBitmap->GetPaletteData();
+  pdfium::span<const uint32_t> src_palette = pSrcBitmap->GetPaletteSpan();
   uint32_t plt[256];
   uint8_t* bgr_ptr = reinterpret_cast<uint8_t*>(plt);
   if (!pSrcBitmap->IsCmykImage()) {
     for (int i = 0; i < 256; ++i) {
-      *bgr_ptr++ = FXARGB_B(src_plt[i]);
-      *bgr_ptr++ = FXARGB_G(src_plt[i]);
-      *bgr_ptr++ = FXARGB_R(src_plt[i]);
+      *bgr_ptr++ = FXARGB_B(src_palette[i]);
+      *bgr_ptr++ = FXARGB_G(src_palette[i]);
+      *bgr_ptr++ = FXARGB_R(src_palette[i]);
     }
     bgr_ptr = reinterpret_cast<uint8_t*>(plt);
   }
@@ -483,8 +483,8 @@
   if (pSrcBitmap->IsCmykImage()) {
     for (int i = 0; i < 256; ++i) {
       std::tie(bgr_ptr[2], bgr_ptr[1], bgr_ptr[0]) = AdobeCMYK_to_sRGB1(
-          FXSYS_GetCValue(src_plt[i]), FXSYS_GetMValue(src_plt[i]),
-          FXSYS_GetYValue(src_plt[i]), FXSYS_GetKValue(src_plt[i]));
+          FXSYS_GetCValue(src_palette[i]), FXSYS_GetMValue(src_palette[i]),
+          FXSYS_GetYValue(src_palette[i]), FXSYS_GetKValue(src_palette[i]));
       bgr_ptr += 3;
     }
     bgr_ptr = reinterpret_cast<uint8_t*>(plt);
@@ -805,7 +805,7 @@
 uint32_t CFX_DIBBase::GetPaletteArgb(int index) const {
   ASSERT((GetBPP() == 1 || GetBPP() == 8) && !IsAlphaMask());
   if (HasPalette())
-    return GetPaletteData()[index];
+    return GetPaletteSpan()[index];
 
   if (IsCmykImage()) {
     if (GetBPP() == 1)
@@ -829,8 +829,9 @@
   ASSERT((GetBPP() == 1 || GetBPP() == 8) && !IsAlphaMask());
   if (HasPalette()) {
     int palsize = (1 << GetBPP());
+    pdfium::span<const uint32_t> palette = GetPaletteSpan();
     for (int i = 0; i < palsize; ++i) {
-      if (GetPaletteData()[i] == color)
+      if (palette[i] == color)
         return i;
     }
     return -1;
@@ -916,15 +917,16 @@
   ASSERT(!IsCmykImage());
 
   if (GetBPP() == 1) {
-    pal[0] = ((HasPalette() ? GetPaletteData()[0] : 0xff000000) & 0xffffff) |
+    pal[0] = ((HasPalette() ? GetPaletteSpan()[0] : 0xff000000) & 0xffffff) |
              (alpha << 24);
-    pal[1] = ((HasPalette() ? GetPaletteData()[1] : 0xffffffff) & 0xffffff) |
+    pal[1] = ((HasPalette() ? GetPaletteSpan()[1] : 0xffffffff) & 0xffffff) |
              (alpha << 24);
     return;
   }
   if (HasPalette()) {
+    pdfium::span<const uint32_t> palette = GetPaletteSpan();
     for (int i = 0; i < 256; ++i)
-      pal[i] = (GetPaletteData()[i] & 0x00ffffff) | (alpha << 24);
+      pal[i] = (palette[i] & 0x00ffffff) | (alpha << 24);
   } else {
     for (int i = 0; i < 256; ++i)
       pal[i] = (i * 0x10101) | (alpha << 24);
diff --git a/core/fxge/dib/cfx_dibbase.h b/core/fxge/dib/cfx_dibbase.h
index e8212b9..763f3d1 100644
--- a/core/fxge/dib/cfx_dibbase.h
+++ b/core/fxge/dib/cfx_dibbase.h
@@ -13,6 +13,7 @@
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxge/fx_dib.h"
+#include "third_party/base/span.h"
 
 enum FXDIB_Channel {
   FXDIB_Red = 1,
@@ -56,6 +57,7 @@
   }
   uint32_t GetPitch() const { return m_Pitch; }
   bool HasPalette() const { return !m_palette.empty(); }
+  pdfium::span<const uint32_t> GetPaletteSpan() const { return m_palette; }
   const uint32_t* GetPaletteData() const { return m_palette.data(); }
   int GetBPP() const { return m_bpp; }
 
diff --git a/core/fxge/dib/cfx_dibitmap.cpp b/core/fxge/dib/cfx_dibitmap.cpp
index f738edc..7d70927 100644
--- a/core/fxge/dib/cfx_dibitmap.cpp
+++ b/core/fxge/dib/cfx_dibitmap.cpp
@@ -547,14 +547,14 @@
     }
     case FXDIB_1bppRgb: {
       if ((*pos) & (1 << (7 - x % 8))) {
-        return HasPalette() ? GetPaletteData()[1] : 0xffffffff;
+        return HasPalette() ? GetPaletteSpan()[1] : 0xffffffff;
       }
-      return HasPalette() ? GetPaletteData()[0] : 0xff000000;
+      return HasPalette() ? GetPaletteSpan()[0] : 0xff000000;
     }
     case FXDIB_8bppMask:
       return (*pos) << 24;
     case FXDIB_8bppRgb:
-      return HasPalette() ? GetPaletteData()[*pos]
+      return HasPalette() ? GetPaletteSpan()[*pos]
                           : (0xff000000 | ((*pos) * 0x10101));
     case FXDIB_Rgb:
     case FXDIB_Rgba:
@@ -588,7 +588,7 @@
       break;
     case FXDIB_1bppRgb:
       if (HasPalette()) {
-        if (color == GetPaletteData()[1]) {
+        if (color == GetPaletteSpan()[1]) {
           *pos |= 1 << (7 - x % 8);
         } else {
           *pos &= ~(1 << (7 - x % 8));
@@ -606,8 +606,9 @@
       break;
     case FXDIB_8bppRgb: {
       if (HasPalette()) {
+        pdfium::span<const uint32_t> palette = GetPaletteSpan();
         for (int i = 0; i < 256; i++) {
-          if (GetPaletteData()[i] == color) {
+          if (palette[i] == color) {
             *pos = (uint8_t)i;
             return;
           }
@@ -664,6 +665,7 @@
       dest_scan[i] = (scanline[src_x / 8] & (1 << (7 - src_x % 8))) ? 255 : 0;
     }
   } else if (src_Bpp == 1) {
+    pdfium::span<const uint32_t> palette = GetPaletteSpan();
     for (int i = 0; i < clip_width; i++) {
       uint32_t dest_x = clip_left + i;
       uint32_t src_x = dest_x * m_Width / dest_width;
@@ -675,13 +677,13 @@
       if (HasPalette()) {
         if (!IsCmykImage()) {
           dest_pos *= 3;
-          FX_ARGB argb = GetPaletteData()[scanline[src_x]];
+          FX_ARGB argb = palette[scanline[src_x]];
           dest_scan[dest_pos] = FXARGB_B(argb);
           dest_scan[dest_pos + 1] = FXARGB_G(argb);
           dest_scan[dest_pos + 2] = FXARGB_R(argb);
         } else {
           dest_pos *= 4;
-          FX_CMYK cmyk = GetPaletteData()[scanline[src_x]];
+          FX_CMYK cmyk = palette[scanline[src_x]];
           dest_scan[dest_pos] = FXSYS_GetCValue(cmyk);
           dest_scan[dest_pos + 1] = FXSYS_GetMValue(cmyk);
           dest_scan[dest_pos + 2] = FXSYS_GetYValue(cmyk);
@@ -1070,7 +1072,7 @@
     int index = 0;
     if (HasPalette()) {
       for (int i = 0; i < 2; i++) {
-        if (GetPaletteData()[i] == color)
+        if (GetPaletteSpan()[i] == color)
           index = i;
       }
     } else {
diff --git a/core/fxge/dib/cfx_imagetransformer.cpp b/core/fxge/dib/cfx_imagetransformer.cpp
index bb0b683..44c3ede 100644
--- a/core/fxge/dib/cfx_imagetransformer.cpp
+++ b/core/fxge/dib/cfx_imagetransformer.cpp
@@ -513,10 +513,11 @@
 void CFX_ImageTransformer::CalcMono(const CalcData& cdata,
                                     FXDIB_Format format) {
   uint32_t argb[256];
-  const FX_ARGB* pPal = m_Storer.GetBitmap()->GetPaletteData();
-  if (pPal) {
+  if (m_Storer.GetBitmap()->HasPalette()) {
+    pdfium::span<const uint32_t> palette =
+        m_Storer.GetBitmap()->GetPaletteSpan();
     for (size_t i = 0; i < pdfium::size(argb); i++)
-      argb[i] = pPal[i];
+      argb[i] = palette[i];
   } else if (m_Storer.GetBitmap()->IsCmykImage()) {
     for (size_t i = 0; i < pdfium::size(argb); i++)
       argb[i] = 255 - i;
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index 868360c..80a03b0 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -667,18 +667,18 @@
       if (pSource->HasPalette()) {
         dst32Storage.reset(FX_Alloc2D(uint32_t, width, height));
         SkPMColor* dst32Pixels = dst32Storage.get();
-        const SkPMColor* ctable = pSource->GetPaletteData();
-        const unsigned ctableSize = pSource->GetPaletteSize();
+        pdfium::span<const uint32_t> src_palette = pSource->GetPaletteSpan();
+        const unsigned src_palette_size = pSource->GetPaletteSize();
         for (int y = 0; y < height; ++y) {
           const uint8_t* srcRow =
               static_cast<const uint8_t*>(buffer) + y * rowBytes;
           uint32_t* dstRow = dst32Pixels + y * width;
           for (int x = 0; x < width; ++x) {
             unsigned index = srcRow[x];
-            if (index >= ctableSize) {
+            if (index >= src_palette_size) {
               index = 0;
             }
-            dstRow[x] = ctable[index];
+            dstRow[x] = src_palette[index];
           }
         }
         buffer = dst32Storage.get();
diff --git a/core/fxge/win32/cfx_windowsdib.cpp b/core/fxge/win32/cfx_windowsdib.cpp
index 08e8d81..4a6fd54 100644
--- a/core/fxge/win32/cfx_windowsdib.cpp
+++ b/core/fxge/win32/cfx_windowsdib.cpp
@@ -48,8 +48,9 @@
     if (pBitmap->GetBPP() == 8) {
       uint32_t* pPalette = (uint32_t*)(pbmih + 1);
       if (pBitmap->HasPalette()) {
+        pdfium::span<const uint32_t> palette = pBitmap->GetPaletteSpan();
         for (int i = 0; i < 256; i++) {
-          pPalette[i] = pBitmap->GetPaletteData()[i];
+          pPalette[i] = palette[i];
         }
       } else {
         for (int i = 0; i < 256; i++) {