Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
cpdf_imageobject.cpp
Go to the documentation of this file.
1
// Copyright 2016 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
#
include
"core/fpdfapi/page/cpdf_imageobject.h"
8
9
#
include
<
utility
>
10
11
#
include
"core/fpdfapi/page/cpdf_docpagedata.h"
12
#
include
"core/fpdfapi/page/cpdf_image.h"
13
#
include
"core/fpdfapi/parser/cpdf_stream.h"
14
#
include
"core/fxcrt/fx_coordinates.h"
15
#
include
"core/fxge/dib/cfx_dibbase.h"
16
#
include
"core/fxge/dib/cfx_dibitmap.h"
17
18
CPDF_ImageObject::
CPDF_ImageObject
(int32_t content_stream)
19
:
CPDF_PageObject
(
content_stream
)
{}
20
21
CPDF_ImageObject::
CPDF_ImageObject
() : CPDF_ImageObject
(
kNoContentStream
)
{}
22
23
CPDF_ImageObject::~
CPDF_ImageObject
() {
24
MaybePurgeCache();
25
}
26
27
CPDF_PageObject
::
Type
CPDF_ImageObject::
GetType
()
const
{
28
return
Type
::
kImage
;
29
}
30
31
void
CPDF_ImageObject::
Transform
(
const
CFX_Matrix
& matrix) {
32
m_Matrix
.
Concat
(
matrix
)
;
33
CalcBoundingBox
(
)
;
34
SetDirty
(
true
);
35
}
36
37
bool
CPDF_ImageObject::
IsImage
()
const
{
38
return
true
;
39
}
40
41
CPDF_ImageObject* CPDF_ImageObject::
AsImage
() {
42
return
this
;
43
}
44
45
const
CPDF_ImageObject* CPDF_ImageObject::
AsImage
()
const
{
46
return
this
;
47
}
48
49
void
CPDF_ImageObject::
CalcBoundingBox
() {
50
static
constexpr
CFX_FloatRect
kRect
(
0.0f
,
0.0f
,
1.0f
,
1.0f
)
;
51
SetOriginalRect
(kRect);
52
SetRect
(m_Matrix
.
TransformRect
(
kRect
)
);
53
}
54
55
void
CPDF_ImageObject::
SetImage
(
RetainPtr
<CPDF_Image> pImage) {
56
MaybePurgeCache();
57
m_pImage = std::move(pImage);
58
}
59
60
RetainPtr
<CPDF_Image> CPDF_ImageObject::
GetImage
()
const
{
61
return
m_pImage;
62
}
63
64
RetainPtr
<CFX_DIBitmap> CPDF_ImageObject::
GetIndependentBitmap
()
const
{
65
RetainPtr
<
CFX_DIBBase
> pSource = GetImage()->LoadDIBBase();
66
67
// Realize() is non-virtual, and can't be overloaded by CPDF_DIB to
68
// return a full-up CPDF_DIB subclass. Instead, it only works upon the
69
// CFX_DIBBase, which is convenient since none of its members point to
70
// objects owned by |this| or the form containing |this|. As a result,
71
// the new bitmap may outlive them, giving the "independent" property
72
// this method is named after.
73
return
pSource ? pSource->Realize() :
nullptr
;
74
}
75
76
void
CPDF_ImageObject::
SetImageMatrix
(
const
CFX_Matrix
& matrix) {
77
m_Matrix
=
matrix;
78
CalcBoundingBox
(
)
;
79
}
80
81
void
CPDF_ImageObject::MaybePurgeCache() {
82
if
(!m_pImage || m_pImage->IsGoingToBeDestroyed()) {
83
return
;
84
}
85
86
RetainPtr
<
const
CPDF_Stream> pStream = m_pImage->GetStream();
87
if
(!pStream)
88
return
;
89
90
uint32_t objnum = pStream->GetObjNum();
91
if
(!objnum)
92
return
;
93
94
auto
* pDoc = m_pImage->GetDocument();
95
CHECK
(pDoc);
96
97
m_pImage.Reset();
// Clear my reference before asking the cache.
98
pDoc->MaybePurgeImage(objnum);
99
}
CFX_DIBBase
Definition
cfx_dibbase.h:35
CFX_FloatRect
Definition
fx_coordinates.h:185
CFX_FloatRect::CFX_FloatRect
constexpr CFX_FloatRect(float l, float b, float r, float t)
Definition
fx_coordinates.h:188
CFX_Matrix
Definition
fx_coordinates.h:440
CFX_Matrix::operator=
CFX_Matrix & operator=(const CFX_Matrix &other)=default
CFX_Matrix::TransformRect
CFX_FloatRect TransformRect(const CFX_FloatRect &rect) const
Definition
fx_coordinates.cpp:475
CFX_Matrix::Concat
void Concat(const CFX_Matrix &right)
Definition
fx_coordinates.h:480
CPDF_ImageObject::Transform
void Transform(const CFX_Matrix &matrix) override
Definition
cpdf_imageobject.cpp:31
CPDF_ImageObject::IsImage
bool IsImage() const override
Definition
cpdf_imageobject.cpp:37
CPDF_ImageObject::AsImage
CPDF_ImageObject * AsImage() override
Definition
cpdf_imageobject.cpp:41
CPDF_ImageObject::CalcBoundingBox
void CalcBoundingBox()
Definition
cpdf_imageobject.cpp:49
CPDF_ImageObject::AsImage
const CPDF_ImageObject * AsImage() const override
Definition
cpdf_imageobject.cpp:45
CPDF_ImageObject::GetImage
RetainPtr< CPDF_Image > GetImage() const
Definition
cpdf_imageobject.cpp:60
CPDF_ImageObject::CPDF_ImageObject
CPDF_ImageObject(int32_t content_stream)
Definition
cpdf_imageobject.cpp:18
CPDF_ImageObject::SetImage
void SetImage(RetainPtr< CPDF_Image > pImage)
Definition
cpdf_imageobject.cpp:55
CPDF_ImageObject::CPDF_ImageObject
CPDF_ImageObject()
Definition
cpdf_imageobject.cpp:21
CPDF_ImageObject::~CPDF_ImageObject
~CPDF_ImageObject() override
Definition
cpdf_imageobject.cpp:23
CPDF_ImageObject::GetIndependentBitmap
RetainPtr< CFX_DIBitmap > GetIndependentBitmap() const
Definition
cpdf_imageobject.cpp:64
CPDF_ImageObject::GetType
Type GetType() const override
Definition
cpdf_imageobject.cpp:27
CPDF_ImageObject::SetImageMatrix
void SetImageMatrix(const CFX_Matrix &matrix)
Definition
cpdf_imageobject.cpp:76
CPDF_PageObject
Definition
cpdf_pageobject.h:27
CPDF_PageObject::SetRect
void SetRect(const CFX_FloatRect &rect)
Definition
cpdf_pageobject.h:69
CPDF_PageObject::SetDirty
void SetDirty(bool value)
Definition
cpdf_pageobject.h:63
CPDF_PageObject::CPDF_PageObject
CPDF_PageObject(int32_t content_stream)
Definition
cpdf_pageobject.cpp:13
CPDF_PageObject::Type
Type
Definition
cpdf_pageobject.h:30
CPDF_PageObject::Type::kImage
@ kImage
Definition
cpdf_pageobject.h:33
CPDF_PageObject::SetOriginalRect
void SetOriginalRect(const CFX_FloatRect &rect)
Definition
cpdf_pageobject.h:67
CPDF_PageObject::kNoContentStream
static constexpr int32_t kNoContentStream
Definition
cpdf_pageobject.h:38
fxcrt::RetainPtr
Definition
retain_ptr.h:28
CHECK
#define CHECK(cvref)
Definition
q23utility.cpp:15
qtwebengine
src
3rdparty
chromium
third_party
pdfium
core
fpdfapi
page
cpdf_imageobject.cpp
Generated on
for Qt by
1.18.0