Index: core/fpdfapi/fpdf_render/fpdf_render_image.cpp |
diff --git a/core/fpdfapi/fpdf_render/fpdf_render_image.cpp b/core/fpdfapi/fpdf_render/fpdf_render_image.cpp |
index 0ea4a17684066ca77d9ec426ba73c57b610266c6..de9d1099cfb06e9258e2f1e705b386d673568fa8 100644 |
--- a/core/fpdfapi/fpdf_render/fpdf_render_image.cpp |
+++ b/core/fpdfapi/fpdf_render/fpdf_render_image.cpp |
@@ -197,98 +197,113 @@ CPDF_DIBTransferFunc::CPDF_DIBTransferFunc( |
m_RampG = &pTransferFunc->m_Samples[256]; |
m_RampB = &pTransferFunc->m_Samples[512]; |
} |
-void CPDF_DIBTransferFunc::TranslateScanline(uint8_t* dest_buf, |
- const uint8_t* src_buf) const { |
- int i; |
+ |
+void CPDF_DIBTransferFunc::TranslateScanline( |
+ const uint8_t* src_buf, |
+ std::vector<uint8_t>* dest_buf) const { |
FX_BOOL bSkip = FALSE; |
switch (m_pSrc->GetFormat()) { |
case FXDIB_1bppRgb: { |
- int r0 = m_RampR[0], g0 = m_RampG[0], b0 = m_RampB[0]; |
- int r1 = m_RampR[255], g1 = m_RampG[255], b1 = m_RampB[255]; |
- for (i = 0; i < m_Width; i++) { |
+ int r0 = m_RampR[0]; |
+ int g0 = m_RampG[0]; |
+ int b0 = m_RampB[0]; |
+ int r1 = m_RampR[255]; |
+ int g1 = m_RampG[255]; |
+ int b1 = m_RampB[255]; |
+ int index = 0; |
+ for (int i = 0; i < m_Width; i++) { |
if (src_buf[i / 8] & (1 << (7 - i % 8))) { |
- *dest_buf++ = b1; |
- *dest_buf++ = g1; |
- *dest_buf++ = r1; |
+ (*dest_buf)[index++] = b1; |
+ (*dest_buf)[index++] = g1; |
+ (*dest_buf)[index++] = r1; |
} else { |
- *dest_buf++ = b0; |
- *dest_buf++ = g0; |
- *dest_buf++ = r0; |
+ (*dest_buf)[index++] = b0; |
+ (*dest_buf)[index++] = g0; |
+ (*dest_buf)[index++] = r0; |
} |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
- dest_buf++; |
+ index++; |
#endif |
} |
break; |
} |
case FXDIB_1bppMask: { |
- int m0 = m_RampR[0], m1 = m_RampR[255]; |
- for (i = 0; i < m_Width; i++) { |
- if (src_buf[i / 8] & (1 << (7 - i % 8))) { |
- *dest_buf++ = m1; |
- } else { |
- *dest_buf++ = m0; |
- } |
+ int m0 = m_RampR[0]; |
+ int m1 = m_RampR[255]; |
+ int index = 0; |
+ for (int i = 0; i < m_Width; i++) { |
+ if (src_buf[i / 8] & (1 << (7 - i % 8))) |
+ (*dest_buf)[index++] = m1; |
+ else |
+ (*dest_buf)[index++] = m0; |
} |
break; |
} |
case FXDIB_8bppRgb: { |
FX_ARGB* pPal = m_pSrc->GetPalette(); |
- for (i = 0; i < m_Width; i++) { |
+ int index = 0; |
+ for (int i = 0; i < m_Width; i++) { |
if (pPal) { |
FX_ARGB src_argb = pPal[*src_buf]; |
- *dest_buf++ = m_RampB[FXARGB_R(src_argb)]; |
- *dest_buf++ = m_RampG[FXARGB_G(src_argb)]; |
- *dest_buf++ = m_RampR[FXARGB_B(src_argb)]; |
+ (*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)]; |
} else { |
uint32_t src_byte = *src_buf; |
- *dest_buf++ = m_RampB[src_byte]; |
- *dest_buf++ = m_RampG[src_byte]; |
- *dest_buf++ = m_RampR[src_byte]; |
+ (*dest_buf)[index++] = m_RampB[src_byte]; |
+ (*dest_buf)[index++] = m_RampG[src_byte]; |
+ (*dest_buf)[index++] = m_RampR[src_byte]; |
} |
src_buf++; |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
- dest_buf++; |
+ index++; |
#endif |
} |
break; |
} |
- case FXDIB_8bppMask: |
- for (i = 0; i < m_Width; i++) { |
- *dest_buf++ = m_RampR[*(src_buf++)]; |
+ case FXDIB_8bppMask: { |
+ int index = 0; |
+ for (int i = 0; i < m_Width; i++) { |
+ (*dest_buf)[index++] = m_RampR[*(src_buf++)]; |
} |
break; |
- case FXDIB_Rgb: |
- for (i = 0; i < m_Width; i++) { |
- *dest_buf++ = m_RampB[*(src_buf++)]; |
- *dest_buf++ = m_RampG[*(src_buf++)]; |
- *dest_buf++ = m_RampR[*(src_buf++)]; |
+ } |
+ case FXDIB_Rgb: { |
+ int index = 0; |
+ for (int i = 0; i < m_Width; i++) { |
+ (*dest_buf)[index++] = m_RampB[*(src_buf++)]; |
+ (*dest_buf)[index++] = m_RampG[*(src_buf++)]; |
+ (*dest_buf)[index++] = m_RampR[*(src_buf++)]; |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
- dest_buf++; |
+ index++; |
#endif |
} |
break; |
+ } |
case FXDIB_Rgb32: |
bSkip = TRUE; |
- case FXDIB_Argb: |
- for (i = 0; i < m_Width; i++) { |
- *dest_buf++ = m_RampB[*(src_buf++)]; |
- *dest_buf++ = m_RampG[*(src_buf++)]; |
- *dest_buf++ = m_RampR[*(src_buf++)]; |
+ case FXDIB_Argb: { |
+ int index = 0; |
+ for (int i = 0; i < m_Width; i++) { |
+ (*dest_buf)[index++] = m_RampB[*(src_buf++)]; |
+ (*dest_buf)[index++] = m_RampG[*(src_buf++)]; |
+ (*dest_buf)[index++] = m_RampR[*(src_buf++)]; |
if (!bSkip) { |
- *dest_buf++ = *src_buf; |
+ (*dest_buf)[index++] = *src_buf; |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
} else { |
- dest_buf++; |
+ index++; |
#endif |
} |
src_buf++; |
} |
break; |
+ } |
default: |
break; |
} |
} |
+ |
void CPDF_DIBTransferFunc::TranslateDownSamples(uint8_t* dest_buf, |
const uint8_t* src_buf, |
int pixels, |