summaryrefslogtreecommitdiff
path: root/core/fpdfapi/page/fpdf_page_colors.cpp
diff options
context:
space:
mode:
authorDan Sinclair <dsinclair@chromium.org>2017-05-25 14:04:59 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-05-25 18:17:31 +0000
commit5acacd361b15b82a8b30cdd5cb92abb8a2104ecf (patch)
treef602c78b802f67f41ea2099f8c7051a324060162 /core/fpdfapi/page/fpdf_page_colors.cpp
parente0e2cd4f8a5634f2878f9b3bf3ce321ffd53a980 (diff)
downloadpdfium-5acacd361b15b82a8b30cdd5cb92abb8a2104ecf.tar.xz
Break apart the pageint.h file.
This CL separates pageint.h and the supporting cpp files into indivudal class files. Change-Id: Idcadce41976a8cd5f0d916e6a5ebbc283fd36527 Reviewed-on: https://pdfium-review.googlesource.com/5930 Commit-Queue: dsinclair <dsinclair@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fpdfapi/page/fpdf_page_colors.cpp')
-rw-r--r--core/fpdfapi/page/fpdf_page_colors.cpp241
1 files changed, 0 insertions, 241 deletions
diff --git a/core/fpdfapi/page/fpdf_page_colors.cpp b/core/fpdfapi/page/fpdf_page_colors.cpp
deleted file mode 100644
index 1526b75041..0000000000
--- a/core/fpdfapi/page/fpdf_page_colors.cpp
+++ /dev/null
@@ -1,241 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "core/fpdfapi/page/pageint.h"
-
-#include <limits.h>
-
-#include <algorithm>
-
-#include "core/fpdfapi/cpdf_modulemgr.h"
-#include "core/fpdfapi/parser/cpdf_array.h"
-#include "core/fpdfapi/parser/cpdf_dictionary.h"
-#include "core/fpdfapi/parser/cpdf_document.h"
-#include "core/fpdfapi/parser/cpdf_stream.h"
-#include "core/fpdfapi/parser/cpdf_stream_acc.h"
-#include "core/fpdfapi/parser/cpdf_string.h"
-#include "core/fxcodec/fx_codec.h"
-#include "third_party/base/logging.h"
-#include "third_party/base/stl_util.h"
-
-namespace {
-
-float NormalizeChannel(float fVal) {
- return pdfium::clamp(fVal, 0.0f, 1.0f);
-}
-
-bool DetectSRGB(const uint8_t* pData, uint32_t dwSize) {
- return dwSize == 3144 && memcmp(pData + 0x190, "sRGB IEC61966-2.1", 17) == 0;
-}
-
-} // namespace
-
-uint32_t ComponentsForFamily(int family) {
- if (family == PDFCS_DEVICERGB)
- return 3;
- if (family == PDFCS_DEVICEGRAY)
- return 1;
- ASSERT(family == PDFCS_DEVICECMYK);
- return 4;
-}
-
-void sRGB_to_AdobeCMYK(float R,
- float G,
- float B,
- float& c,
- float& m,
- float& y,
- float& k) {
- c = 1.0f - R;
- m = 1.0f - G;
- y = 1.0f - B;
- k = std::min(c, std::min(m, y));
-}
-
-void ReverseRGB(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels) {
- if (pDestBuf == pSrcBuf) {
- for (int i = 0; i < pixels; i++) {
- uint8_t temp = pDestBuf[2];
- pDestBuf[2] = pDestBuf[0];
- pDestBuf[0] = temp;
- pDestBuf += 3;
- }
- } else {
- for (int i = 0; i < pixels; i++) {
- *pDestBuf++ = pSrcBuf[2];
- *pDestBuf++ = pSrcBuf[1];
- *pDestBuf++ = pSrcBuf[0];
- pSrcBuf += 3;
- }
- }
-}
-
-CPDF_DeviceCS::CPDF_DeviceCS(int family)
- : CPDF_ColorSpace(nullptr, family, ComponentsForFamily(family)) {
- ASSERT(family == PDFCS_DEVICEGRAY || family == PDFCS_DEVICERGB ||
- family == PDFCS_DEVICECMYK);
-}
-
-CPDF_DeviceCS::~CPDF_DeviceCS() {}
-
-bool CPDF_DeviceCS::GetRGB(float* pBuf, float* R, float* G, float* B) const {
- switch (m_Family) {
- case PDFCS_DEVICEGRAY:
- *R = NormalizeChannel(*pBuf);
- *G = *R;
- *B = *R;
- return true;
- case PDFCS_DEVICERGB:
- *R = NormalizeChannel(pBuf[0]);
- *G = NormalizeChannel(pBuf[1]);
- *B = NormalizeChannel(pBuf[2]);
- return true;
- case PDFCS_DEVICECMYK:
- if (m_dwStdConversion) {
- float k = pBuf[3];
- *R = 1.0f - std::min(1.0f, pBuf[0] + k);
- *G = 1.0f - std::min(1.0f, pBuf[1] + k);
- *B = 1.0f - std::min(1.0f, pBuf[2] + k);
- } else {
- AdobeCMYK_to_sRGB(NormalizeChannel(pBuf[0]), NormalizeChannel(pBuf[1]),
- NormalizeChannel(pBuf[2]), NormalizeChannel(pBuf[3]),
- *R, *G, *B);
- }
- return true;
- default:
- NOTREACHED();
- return false;
- }
-}
-
-bool CPDF_DeviceCS::v_GetCMYK(float* pBuf,
- float* c,
- float* m,
- float* y,
- float* k) const {
- if (m_Family != PDFCS_DEVICECMYK)
- return false;
-
- *c = pBuf[0];
- *m = pBuf[1];
- *y = pBuf[2];
- *k = pBuf[3];
- return true;
-}
-
-bool CPDF_DeviceCS::SetRGB(float* pBuf, float R, float G, float B) const {
- switch (m_Family) {
- case PDFCS_DEVICEGRAY:
- if (R != G || R != B)
- return false;
- *pBuf = R;
- return true;
- case PDFCS_DEVICERGB:
- pBuf[0] = R;
- pBuf[1] = G;
- pBuf[2] = B;
- return true;
- case PDFCS_DEVICECMYK:
- sRGB_to_AdobeCMYK(R, G, B, pBuf[0], pBuf[1], pBuf[2], pBuf[3]);
- return true;
- default:
- NOTREACHED();
- return false;
- }
-}
-
-bool CPDF_DeviceCS::v_SetCMYK(float* pBuf,
- float c,
- float m,
- float y,
- float k) const {
- switch (m_Family) {
- case PDFCS_DEVICEGRAY:
- return false;
- case PDFCS_DEVICERGB:
- AdobeCMYK_to_sRGB(c, m, y, k, pBuf[0], pBuf[1], pBuf[2]);
- return true;
- case PDFCS_DEVICECMYK:
- pBuf[0] = c;
- pBuf[1] = m;
- pBuf[2] = y;
- pBuf[3] = k;
- return true;
- default:
- NOTREACHED();
- return false;
- }
-}
-
-void CPDF_DeviceCS::TranslateImageLine(uint8_t* pDestBuf,
- const uint8_t* pSrcBuf,
- int pixels,
- int image_width,
- int image_height,
- bool bTransMask) const {
- switch (m_Family) {
- case PDFCS_DEVICEGRAY:
- for (int i = 0; i < pixels; i++) {
- *pDestBuf++ = pSrcBuf[i];
- *pDestBuf++ = pSrcBuf[i];
- *pDestBuf++ = pSrcBuf[i];
- }
- break;
- case PDFCS_DEVICERGB:
- ReverseRGB(pDestBuf, pSrcBuf, pixels);
- break;
- case PDFCS_DEVICECMYK:
- if (bTransMask) {
- for (int i = 0; i < pixels; i++) {
- int k = 255 - pSrcBuf[3];
- pDestBuf[0] = ((255 - pSrcBuf[0]) * k) / 255;
- pDestBuf[1] = ((255 - pSrcBuf[1]) * k) / 255;
- pDestBuf[2] = ((255 - pSrcBuf[2]) * k) / 255;
- pDestBuf += 3;
- pSrcBuf += 4;
- }
- } else {
- for (int i = 0; i < pixels; i++) {
- if (m_dwStdConversion) {
- uint8_t k = pSrcBuf[3];
- pDestBuf[2] = 255 - std::min(255, pSrcBuf[0] + k);
- pDestBuf[1] = 255 - std::min(255, pSrcBuf[1] + k);
- pDestBuf[0] = 255 - std::min(255, pSrcBuf[2] + k);
- } else {
- AdobeCMYK_to_sRGB1(pSrcBuf[0], pSrcBuf[1], pSrcBuf[2], pSrcBuf[3],
- pDestBuf[2], pDestBuf[1], pDestBuf[0]);
- }
- pSrcBuf += 4;
- pDestBuf += 3;
- }
- }
- break;
- default:
- NOTREACHED();
- break;
- }
-}
-
-CPDF_IccProfile::CPDF_IccProfile(CPDF_Stream* pStream,
- const uint8_t* pData,
- uint32_t dwSize)
- : m_bsRGB(DetectSRGB(pData, dwSize)), m_pStream(pStream) {
- if (m_bsRGB) {
- m_nSrcComponents = 3;
- return;
- }
- uint32_t nSrcComps = 0;
- auto* pIccModule = CPDF_ModuleMgr::Get()->GetIccModule();
- m_pTransform = pIccModule->CreateTransform_sRGB(pData, dwSize, nSrcComps);
- if (m_pTransform)
- m_nSrcComponents = nSrcComps;
-}
-
-CPDF_IccProfile::~CPDF_IccProfile() {
- if (m_pTransform) {
- CPDF_ModuleMgr::Get()->GetIccModule()->DestroyTransform(m_pTransform);
- }
-}