diff options
Diffstat (limited to 'core/fpdfapi/render')
-rw-r--r-- | core/fpdfapi/render/cpdf_dibsource.cpp | 24 | ||||
-rw-r--r-- | core/fpdfapi/render/cpdf_renderstatus.cpp | 50 |
2 files changed, 34 insertions, 40 deletions
diff --git a/core/fpdfapi/render/cpdf_dibsource.cpp b/core/fpdfapi/render/cpdf_dibsource.cpp index 899a783c47..27f59c05f1 100644 --- a/core/fpdfapi/render/cpdf_dibsource.cpp +++ b/core/fpdfapi/render/cpdf_dibsource.cpp @@ -795,8 +795,7 @@ void CPDF_DIBSource::LoadPalette() { m_bpc == 8 && m_bDefaultDecode) { } else { int palette_count = 1 << (m_bpc * m_nComponents); - CFX_FixedBufGrow<float, 16> color_values(m_nComponents); - float* color_value = color_values; + std::vector<float> color_value(std::max(16U, m_nComponents)); for (int i = 0; i < palette_count; i++) { int color_data = i; for (uint32_t j = 0; j < m_nComponents; j++) { @@ -811,11 +810,11 @@ void CPDF_DIBSource::LoadPalette() { int nComponents = m_pColorSpace->CountComponents(); std::vector<float> temp_buf(nComponents); for (int k = 0; k < nComponents; k++) { - temp_buf[k] = *color_value; + temp_buf[k] = color_value[0]; } m_pColorSpace->GetRGB(temp_buf.data(), &R, &G, &B); } else { - m_pColorSpace->GetRGB(color_value, &R, &G, &B); + m_pColorSpace->GetRGB(color_value.data(), &R, &G, &B); } SetPaletteArgb(i, ArgbEncode(255, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255))); @@ -915,8 +914,7 @@ void CPDF_DIBSource::TranslateScanline24bpp(uint8_t* dest_scan, } } - CFX_FixedBufGrow<float, 16> color_values1(m_nComponents); - float* color_values = color_values1; + std::vector<float> color_values(std::max(16U, m_nComponents)); float R = 0.0f; float G = 0.0f; float B = 0.0f; @@ -935,7 +933,7 @@ void CPDF_DIBSource::TranslateScanline24bpp(uint8_t* dest_scan, G = (1.0f - color_values[1]) * k; B = (1.0f - color_values[2]) * k; } else { - m_pColorSpace->GetRGB(color_values, &R, &G, &B); + m_pColorSpace->GetRGB(color_values.data(), &R, &G, &B); } R = ClampValue(R, 1.0f); G = ClampValue(G, 1.0f); @@ -961,7 +959,7 @@ void CPDF_DIBSource::TranslateScanline24bpp(uint8_t* dest_scan, G = (1.0f - color_values[1]) * k; B = (1.0f - color_values[2]) * k; } else { - m_pColorSpace->GetRGB(color_values, &R, &G, &B); + m_pColorSpace->GetRGB(color_values.data(), &R, &G, &B); } R = ClampValue(R, 1.0f); G = ClampValue(G, 1.0f); @@ -1344,7 +1342,7 @@ void CPDF_DIBSource::DownSampleScanline32Bit(int orig_Bpp, if (src_x == last_src_x) { argb = last_argb; } else { - CFX_FixedBufGrow<uint8_t, 128> extracted_components(m_nComponents); + std::vector<uint8_t> extracted_components(std::max(128U, m_nComponents)); const uint8_t* pSrcPixel = nullptr; if (m_bpc % 8 != 0) { // No need to check for 32-bit overflow, as |src_x| is bounded by @@ -1358,13 +1356,13 @@ void CPDF_DIBSource::DownSampleScanline32Bit(int orig_Bpp, GetBits8(pSrcPixel, src_bit_pos, m_bpc) * unit_To8Bpc); src_bit_pos += m_bpc; } - pSrcPixel = extracted_components; + pSrcPixel = extracted_components.data(); } else { pSrcPixel = pSrcLine + src_x * orig_Bpp; if (m_bpc == 16) { for (uint32_t j = 0; j < m_nComponents; ++j) extracted_components[j] = pSrcPixel[j * 2]; - pSrcPixel = extracted_components; + pSrcPixel = extracted_components.data(); } } @@ -1385,8 +1383,8 @@ void CPDF_DIBSource::DownSampleScanline32Bit(int orig_Bpp, extracted_components[j] = color_value > 255 ? 255 : (color_value < 0 ? 0 : color_value); } - m_pColorSpace->TranslateImageLine(color, extracted_components, 1, 0, - 0, bTransMask); + m_pColorSpace->TranslateImageLine(color, extracted_components.data(), + 1, 0, 0, bTransMask); } argb = FXARGB_MAKE(0xFF, color[2], color[1], color[0]); } else { diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index 17576fc1f3..a40a25c5cf 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp @@ -135,9 +135,8 @@ void DrawAxialShading(CFX_DIBitmap* pBitmap, matrix.SetReverse(*pObject2Bitmap); uint32_t total_results = std::max(CountOutputs(funcs), pCS->CountComponents()); - CFX_FixedBufGrow<float, 16> result_array(total_results); - float* pResults = result_array; - FXSYS_memset(pResults, 0, total_results * sizeof(float)); + std::vector<float> pResults(std::max(16U, total_results)); + FXSYS_memset(pResults.data(), 0, total_results * sizeof(float)); uint32_t rgb_array[SHADING_STEPS]; for (int i = 0; i < SHADING_STEPS; i++) { float input = (t_max - t_min) * i / SHADING_STEPS + t_min; @@ -145,14 +144,14 @@ void DrawAxialShading(CFX_DIBitmap* pBitmap, for (const auto& func : funcs) { if (func) { int nresults = 0; - if (func->Call(&input, 1, pResults + offset, &nresults)) + if (func->Call(&input, 1, pResults.data() + offset, &nresults)) offset += nresults; } } float R = 0.0f; float G = 0.0f; float B = 0.0f; - pCS->GetRGB(pResults, &R, &G, &B); + pCS->GetRGB(pResults.data(), &R, &G, &B); rgb_array[i] = FXARGB_TODIB(FXARGB_MAKE(alpha, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255))); @@ -218,9 +217,8 @@ void DrawRadialShading(CFX_DIBitmap* pBitmap, } uint32_t total_results = std::max(CountOutputs(funcs), pCS->CountComponents()); - CFX_FixedBufGrow<float, 16> result_array(total_results); - float* pResults = result_array; - FXSYS_memset(pResults, 0, total_results * sizeof(float)); + std::vector<float> pResults(std::max(16U, total_results)); + FXSYS_memset(pResults.data(), 0, total_results * sizeof(float)); uint32_t rgb_array[SHADING_STEPS]; for (int i = 0; i < SHADING_STEPS; i++) { float input = (t_max - t_min) * i / SHADING_STEPS + t_min; @@ -228,14 +226,14 @@ void DrawRadialShading(CFX_DIBitmap* pBitmap, for (const auto& func : funcs) { if (func) { int nresults; - if (func->Call(&input, 1, pResults + offset, &nresults)) + if (func->Call(&input, 1, pResults.data() + offset, &nresults)) offset += nresults; } } float R = 0.0f; float G = 0.0f; float B = 0.0f; - pCS->GetRGB(pResults, &R, &G, &B); + pCS->GetRGB(pResults.data(), &R, &G, &B); rgb_array[i] = FXARGB_TODIB(FXARGB_MAKE(alpha, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255))); @@ -343,9 +341,8 @@ void DrawFuncShading(CFX_DIBitmap* pBitmap, int pitch = pBitmap->GetPitch(); uint32_t total_results = std::max(CountOutputs(funcs), pCS->CountComponents()); - CFX_FixedBufGrow<float, 16> result_array(total_results); - float* pResults = result_array; - FXSYS_memset(pResults, 0, total_results * sizeof(float)); + std::vector<float> pResults(std::max(16U, total_results)); + FXSYS_memset(pResults.data(), 0, total_results * sizeof(float)); for (int row = 0; row < height; row++) { uint32_t* dib_buf = (uint32_t*)(pBitmap->GetBuffer() + row * pitch); for (int column = 0; column < width; column++) { @@ -359,7 +356,7 @@ void DrawFuncShading(CFX_DIBitmap* pBitmap, for (const auto& func : funcs) { if (func) { int nresults; - if (func->Call(input, 2, pResults + offset, &nresults)) + if (func->Call(input, 2, pResults.data() + offset, &nresults)) offset += nresults; } } @@ -367,7 +364,7 @@ void DrawFuncShading(CFX_DIBitmap* pBitmap, float R = 0.0f; float G = 0.0f; float B = 0.0f; - pCS->GetRGB(pResults, &R, &G, &B); + pCS->GetRGB(pResults.data(), &R, &G, &B); dib_buf[column] = FXARGB_TODIB(FXARGB_MAKE( alpha, (int32_t)(R * 255), (int32_t)(G * 255), (int32_t)(B * 255))); } @@ -2042,13 +2039,13 @@ void CPDF_RenderStatus::DrawShading(CPDF_ShadingPattern* pPattern, CPDF_Array* pBackColor = pDict->GetArrayFor("Background"); if (pBackColor && pBackColor->GetCount() >= pColorSpace->CountComponents()) { - CFX_FixedBufGrow<float, 16> comps(pColorSpace->CountComponents()); + std::vector<float> comps(std::max(16U, pColorSpace->CountComponents())); for (uint32_t i = 0; i < pColorSpace->CountComponents(); i++) comps[i] = pBackColor->GetNumberAt(i); float R = 0.0f; float G = 0.0f; float B = 0.0f; - pColorSpace->GetRGB(comps, &R, &G, &B); + pColorSpace->GetRGB(comps.data(), &R, &G, &B); background = ArgbEncode(255, (int32_t)(R * 255), (int32_t)(G * 255), (int32_t)(B * 255)); } @@ -2576,22 +2573,21 @@ std::unique_ptr<CFX_DIBitmap> CPDF_RenderStatus::LoadSMask( float R, G, B; uint32_t comps = 8; - if (pCS->CountComponents() > comps) { + if (pCS->CountComponents() > comps) comps = pCS->CountComponents(); - } - CFX_FixedBufGrow<float, 8> float_array(comps); - float* pFloats = float_array; + + std::vector<float> pFloats(std::max(8U, comps)); FX_SAFE_UINT32 num_floats = comps; num_floats *= sizeof(float); - if (!num_floats.IsValid()) { + if (!num_floats.IsValid()) return nullptr; - } - FXSYS_memset(pFloats, 0, num_floats.ValueOrDie()); + + FXSYS_memset(pFloats.data(), 0, num_floats.ValueOrDie()); size_t count = pBC->GetCount() > 8 ? 8 : pBC->GetCount(); for (size_t i = 0; i < count; i++) { pFloats[i] = pBC->GetNumberAt(i); } - pCS->GetRGB(pFloats, &R, &G, &B); + pCS->GetRGB(pFloats.data(), &R, &G, &B); back_color = 0xff000000 | ((int32_t)(R * 255) << 16) | ((int32_t)(G * 255) << 8) | (int32_t)(B * 255); m_pContext->GetDocument()->GetPageData()->ReleaseColorSpace(pCSObj); @@ -2623,11 +2619,11 @@ std::unique_ptr<CFX_DIBitmap> CPDF_RenderStatus::LoadSMask( int src_pitch = bitmap.GetPitch(); std::vector<uint8_t> transfers(256); if (pFunc) { - CFX_FixedBufGrow<float, 16> results(pFunc->CountOutputs()); + std::vector<float> results(std::max(16U, pFunc->CountOutputs())); for (int i = 0; i < 256; i++) { float input = (float)i / 255.0f; int nresult; - pFunc->Call(&input, 1, results, &nresult); + pFunc->Call(&input, 1, results.data(), &nresult); transfers[i] = FXSYS_round(results[0] * 255); } } else { |