Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cpdf_function.h
Go to the documentation of this file.
1// Copyright 2017 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#ifndef CORE_FPDFAPI_PAGE_CPDF_FUNCTION_H_
8#define CORE_FPDFAPI_PAGE_CPDF_FUNCTION_H_
9
10#include <memory>
11#include <set>
12#include <vector>
13
14#include "core/fxcrt/retain_ptr.h"
15#include "third_party/abseil-cpp/absl/types/optional.h"
16#include "third_party/base/containers/span.h"
17
18class CPDF_ExpIntFunc;
19class CPDF_Object;
20class CPDF_SampledFunc;
21class CPDF_StitchFunc;
22
24 public:
25 // Valid values are from ISO 32000-1:2008 spec, table 38. DO NOT CHANGE.
26 enum class Type {
27 kTypeInvalid = -1,
28 kType0Sampled = 0,
32 };
33
35 RetainPtr<const CPDF_Object> pFuncObj);
36
37 virtual ~CPDF_Function();
38
39 absl::optional<uint32_t> Call(pdfium::span<const float> inputs,
40 pdfium::span<float> results) const;
41 uint32_t CountInputs() const { return m_nInputs; }
42 uint32_t CountOutputs() const { return m_nOutputs; }
43 float GetDomain(int i) const { return m_Domains[i]; }
44 float GetRange(int i) const { return m_Ranges[i]; }
45 float Interpolate(float x,
46 float xmin,
47 float xmax,
48 float ymin,
49 float ymax) const;
50
51#if defined(PDF_USE_SKIA)
52 const CPDF_SampledFunc* ToSampledFunc() const;
53 const CPDF_ExpIntFunc* ToExpIntFunc() const;
54 const CPDF_StitchFunc* ToStitchFunc() const;
55#endif // defined(PDF_USE_SKIA)
56
57 protected:
58 explicit CPDF_Function(Type type);
59
62 RetainPtr<const CPDF_Object> pFuncObj,
63 VisitedSet* pVisited);
64 bool Init(const CPDF_Object* pObj, VisitedSet* pVisited);
65 virtual bool v_Init(const CPDF_Object* pObj, VisitedSet* pVisited) = 0;
66 virtual bool v_Call(pdfium::span<const float> inputs,
67 pdfium::span<float> results) const = 0;
68
69 const Type m_Type;
70 uint32_t m_nInputs = 0;
71 uint32_t m_nOutputs = 0;
74};
75
76#endif // CORE_FPDFAPI_PAGE_CPDF_FUNCTION_H_
bool IsEmpty() const
Definition cpdf_array.h:40
CPDF_BasedCS(Family family)
virtual const CPDF_IndexedCS * AsIndexedCS() const
static void InitializeGlobals()
Family GetFamily() const
~CPDF_ColorSpace() override
static void DestroyGlobals()
virtual const CPDF_PatternCS * AsPatternCS() const
virtual bool IsNormal() const
virtual void EnableStdConversion(bool bEnabled)
std::vector< float > CreateBufAndSetDefaultColor() const
CPDF_ColorSpace(Family family)
virtual bool GetRGB(pdfium::span< const float > pBuf, float *R, float *G, float *B) const =0
static uint32_t ComponentsForFamily(Family family)
virtual void TranslateImageLine(pdfium::span< uint8_t > dest_span, pdfium::span< const uint8_t > src_span, int pixels, int image_width, int image_height, bool bTransMask) const
static RetainPtr< CPDF_ColorSpace > GetStockCSForName(const ByteString &name)
bool HasSameArray(const CPDF_Object *pObj) const
void SetComponentsForStockCS(uint32_t nComponents)
static RetainPtr< CPDF_ColorSpace > GetStockCS(Family family)
uint32_t CountComponents() const
virtual void GetDefaultValue(int iComponent, float *value, float *min, float *max) const
~CPDF_DeviceCS() override
void TranslateImageLine(pdfium::span< uint8_t > dest_span, pdfium::span< const uint8_t > src_span, int pixels, int image_width, int image_height, bool bTransMask) const override
uint32_t v_Load(CPDF_Document *pDoc, const CPDF_Array *pArray, std::set< const CPDF_Object * > *pVisited) override
bool GetRGB(pdfium::span< const float > pBuf, float *R, float *G, float *B) const override
uint32_t m_nOutputs
uint32_t m_nInputs
virtual bool v_Call(pdfium::span< const float > inputs, pdfium::span< float > results) const =0
std::vector< float > m_Ranges
virtual ~CPDF_Function()
static std::unique_ptr< CPDF_Function > Load(RetainPtr< const CPDF_Object > pFuncObj, VisitedSet *pVisited)
float GetRange(int i) const
bool Init(const CPDF_Object *pObj, VisitedSet *pVisited)
CPDF_Function(Type type)
const Type m_Type
std::vector< float > m_Domains
absl::optional< uint32_t > Call(pdfium::span< const float > inputs, pdfium::span< float > results) const
uint32_t CountOutputs() const
float GetDomain(int i) const
virtual bool v_Init(const CPDF_Object *pObj, VisitedSet *pVisited)=0
uint32_t CountInputs() const
static std::unique_ptr< CPDF_Function > Load(RetainPtr< const CPDF_Object > pFuncObj)
float Interpolate(float x, float xmin, float xmax, float ymin, float ymax) const
virtual ByteString GetString() const
bool IsName() const
const CPDF_Array * AsArray() const
const CPDF_Stream * AsStream() const
void SetComps(pdfium::span< const float > comps)
PatternValue(const PatternValue &that)
static bool IsValidIccComponents(int components)
bool operator==(const char *ptr) const
constexpr uint32_t FXBSTR_ID(uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4)
Definition fx_string.h:19
int FXSYS_roundf(float f)
Definition fx_system.cpp:92
void ReverseRGB(uint8_t *pDestBuf, const uint8_t *pSrcBuf, int pixels)
Definition fx_codec.cpp:21
#define CHECK(cvref)
#define CONSTRUCT_VIA_MAKE_RETAIN
Definition retain_ptr.h:224