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_dib.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_DIB_H_
8#define CORE_FPDFAPI_PAGE_CPDF_DIB_H_
9
10#include <stdint.h>
11
12#include <memory>
13#include <vector>
14
15#include "core/fpdfapi/page/cpdf_colorspace.h"
16#include "core/fxcrt/data_vector.h"
17#include "core/fxcrt/retain_ptr.h"
18#include "core/fxcrt/unowned_ptr.h"
19#include "core/fxge/dib/cfx_dibbase.h"
20#include "third_party/base/containers/span.h"
21
22class CPDF_Dictionary;
23class CPDF_Document;
24class CPDF_Stream;
25class CPDF_StreamAcc;
26
33
34namespace fxcodec {
35class Jbig2Context;
36class ScanlineDecoder;
37} // namespace fxcodec
38
39constexpr size_t kHugeImageSize = 60000000;
40
41class CPDF_DIB final : public CFX_DIBBase {
42 public:
44
46
47 // CFX_DIBBase:
48 pdfium::span<const uint8_t> GetScanline(int line) const override;
49 bool SkipToScanline(int line, PauseIndicatorIface* pPause) const override;
51
52 RetainPtr<CPDF_ColorSpace> GetColorSpace() const { return m_pColorSpace; }
53 uint32_t GetMatteColor() const { return m_MatteColor; }
54 bool IsJBigImage() const;
55
56 bool Load();
57 LoadState StartLoadDIBBase(bool bHasMask,
58 const CPDF_Dictionary* pFormResources,
59 const CPDF_Dictionary* pPageResources,
60 bool bStdCS,
61 CPDF_ColorSpace::Family GroupFamily,
62 bool bLoadMask,
63 const CFX_Size& max_size_required);
65 RetainPtr<CPDF_DIB> DetachMask();
66
67 private:
68 CPDF_DIB(CPDF_Document* pDoc, RetainPtr<const CPDF_Stream> pStream);
69 ~CPDF_DIB() override;
70
71 struct JpxSMaskInlineData {
72 JpxSMaskInlineData();
73 ~JpxSMaskInlineData();
74
75 int width = 0;
76 int height = 0;
77 DataVector<uint8_t> data;
78 };
79
80 bool LoadInternal(const CPDF_Dictionary* pFormResources,
81 const CPDF_Dictionary* pPageResources);
82 bool ContinueInternal();
83 LoadState StartLoadMask();
84 LoadState StartLoadMaskDIB(RetainPtr<const CPDF_Stream> mask_stream);
85 bool ContinueToLoadMask();
86 LoadState ContinueLoadMaskDIB(PauseIndicatorIface* pPause);
87 bool LoadColorInfo(const CPDF_Dictionary* pFormResources,
88 const CPDF_Dictionary* pPageResources);
89 bool GetDecodeAndMaskArray();
90 RetainPtr<CFX_DIBitmap> LoadJpxBitmap(uint8_t resolution_levels_to_skip);
91 void LoadPalette();
92 LoadState CreateDecoder(uint8_t resolution_levels_to_skip);
93 bool CreateDCTDecoder(pdfium::span<const uint8_t> src_span,
94 const CPDF_Dictionary* pParams);
95 void TranslateScanline24bpp(pdfium::span<uint8_t> dest_scan,
96 pdfium::span<const uint8_t> src_scan) const;
97 bool TranslateScanline24bppDefaultDecode(
98 pdfium::span<uint8_t> dest_scan,
99 pdfium::span<const uint8_t> src_scan) const;
100 bool ValidateDictParam(const ByteString& filter);
101 bool TransMask() const;
102 void SetMaskProperties();
103
104 uint32_t Get1BitSetValue() const;
105 uint32_t Get1BitResetValue() const;
106
107 UnownedPtr<CPDF_Document> const m_pDocument;
108 RetainPtr<const CPDF_Stream> const m_pStream;
109 RetainPtr<const CPDF_Dictionary> m_pDict;
110 RetainPtr<CPDF_StreamAcc> m_pStreamAcc;
111 RetainPtr<CPDF_ColorSpace> m_pColorSpace;
112 uint32_t m_bpc = 0;
113 uint32_t m_bpc_orig = 0;
114 uint32_t m_nComponents = 0;
117 uint32_t m_MatteColor = 0;
118 LoadState m_Status = LoadState::kFail;
119 bool m_bLoadMask = false;
120 bool m_bDefaultDecode = true;
121 bool m_bImageMask = false;
122 bool m_bDoBpcCheck = true;
123 bool m_bColorKey = false;
124 bool m_bHasMask = false;
125 bool m_bStdCS = false;
126 std::vector<DIB_COMP_DATA> m_CompData;
127 mutable DataVector<uint8_t> m_LineBuf;
128 mutable DataVector<uint8_t> m_MaskBuf;
129 RetainPtr<CFX_DIBitmap> m_pCachedBitmap;
130 // Note: Must not create a cycle between CPDF_DIB instances.
131 RetainPtr<CPDF_DIB> m_pMask;
132 RetainPtr<CPDF_StreamAcc> m_pGlobalAcc;
133 std::unique_ptr<fxcodec::ScanlineDecoder> m_pDecoder;
134 JpxSMaskInlineData m_JpxInlineData;
135
136 // Must come after |m_pCachedBitmap|.
137 std::unique_ptr<fxcodec::Jbig2Context> m_pJbig2Context;
138};
139
140#endif // CORE_FPDFAPI_PAGE_CPDF_DIB_H_
bool HasPalette() const
Definition cfx_dibbase.h:62
FXDIB_Format m_Format
void SetPaletteArgb(int index, uint32_t color)
Family GetFamily() const
static uint32_t ComponentsForFamily(Family family)
static RetainPtr< CPDF_ColorSpace > GetStockCS(Family family)
~CPDF_DIB() override
RetainPtr< CPDF_DIB > DetachMask()
Definition cpdf_dib.cpp:881
size_t GetEstimatedImageMemoryBurden() const override
uint32_t GetMatteColor() const
Definition cpdf_dib.h:53
bool SkipToScanline(int line, PauseIndicatorIface *pPause) const override
bool IsJBigImage() const
Definition cpdf_dib.cpp:885
RetainPtr< CPDF_ColorSpace > GetColorSpace() const
Definition cpdf_dib.h:52
LoadState ContinueLoadDIBBase(PauseIndicatorIface *pPause)
Definition cpdf_dib.cpp:315
bool Load()
Definition cpdf_dib.cpp:224
pdfium::span< const uint8_t > GetScanline(int line) const override
LoadState StartLoadDIBBase(bool bHasMask, const CPDF_Dictionary *pFormResources, const CPDF_Dictionary *pPageResources, bool bStdCS, CPDF_ColorSpace::Family GroupFamily, bool bLoadMask, const CFX_Size &max_size_required)
Definition cpdf_dib.cpp:269
static bool IsValidJpegBitsPerComponent(int32_t bpc)
static bool IsValidJpegComponent(int32_t comps)
int GetMaxIndex() const
static bool IsValidIccComponents(int components)
bool operator==(const char *ptr) const
bool IsEmpty() const
Definition bytestring.h:119
bool operator!=(const char *ptr) const
Definition bytestring.h:130
constexpr size_t kHugeImageSize
Definition cpdf_dib.h:39
FXCODEC_STATUS
#define FXARGB_B(argb)
Definition fx_dib.h:127
#define FXARGB_G(argb)
Definition fx_dib.h:126
FXDIB_Format MakeRGBFormat(int bpp)
Definition fx_dib.cpp:23
constexpr FX_ARGB ArgbEncode(uint32_t a, uint32_t r, uint32_t g, uint32_t b)
Definition fx_dib.h:118
#define FXARGB_R(argb)
Definition fx_dib.h:125
FXDIB_Format
Definition fx_dib.h:19
int FXSYS_roundf(float f)
Definition fx_system.cpp:92
#define CHECK(cvref)
#define CONSTRUCT_VIA_MAKE_RETAIN
Definition retain_ptr.h:224
float m_DecodeStep
Definition cpdf_dib.h:29
int m_ColorKeyMin
Definition cpdf_dib.h:30
int m_ColorKeyMax
Definition cpdf_dib.h:31
float m_DecodeMin
Definition cpdf_dib.h:28