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