7#ifndef CORE_FXGE_DIB_CFX_DIBITMAP_H_
8#define CORE_FXGE_DIB_CFX_DIBITMAP_H_
15#include "core/fxcrt/compiler_specific.h"
16#include "core/fxcrt/fx_memory_wrappers.h"
17#include "core/fxcrt/maybe_owned.h"
18#include "core/fxcrt/retain_ptr.h"
19#include "core/fxcrt/span.h"
20#include "core/fxcrt/span_util.h"
21#include "core/fxge/dib/cfx_dibbase.h"
22#include "core/fxge/dib/fx_dib.h"
31#if defined(PDF_USE_SKIA)
34 class ScopedPremultiplier {
38 ScopedPremultiplier(RetainPtr<CFX_DIBitmap> bitmap,
bool do_premultiply);
39 ~ScopedPremultiplier();
42 RetainPtr<CFX_DIBitmap>
const bitmap_;
43 const bool do_premultiply_;
50 [[nodiscard]]
bool Create(
int width,
61#if BUILDFLAG(IS_WIN) || defined(PDF_USE_SKIA)
62 RetainPtr<
const CFX_DIBitmap> RealizeIfNeeded()
const override;
67 pdfium::span<
const uint8_t> src = GetBuffer();
70 pdfium::make_span(
const_cast<uint8_t*>(src.data()), src.size()));
75 pdfium::span<
const uint8_t> src = GetScanline(line);
78 pdfium::make_span(
const_cast<uint8_t*>(src.data()), src.size()));
85 return fxcrt::reinterpret_span<T>(GetWritableScanline(line))
91 void Clear(uint32_t color);
93#if defined(PDF_USE_SKIA)
94 uint32_t GetPixelForTesting(
int x,
int y)
const;
164#if defined(PDF_USE_SKIA)
167 void UnPreMultiply();
171 enum class Channel : uint8_t { kRed, kAlpha };
174 CFX_DIBitmap(
const CFX_DIBitmap& src);
177 void ConvertBGRColorScale(uint32_t forecolor, uint32_t backcolor);
178 bool TransferWithUnequalFormats(
FXDIB_Format dest_format,
186 void TransferWithMultipleBPP(
int dest_left,
193 void TransferEqualFormatsOneBPP(
int dest_left,
bool CompositeBitmap(int dest_left, int dest_top, int width, int height, RetainPtr< const CFX_DIBBase > source, int src_left, int src_top, BlendMode blend_type, const CFX_AggClipRgn *pClipRgn, bool bRgbByteOrder)
bool CompositeMask(int dest_left, int dest_top, int width, int height, RetainPtr< const CFX_DIBBase > pMask, uint32_t color, int src_left, int src_top, BlendMode blend_type, const CFX_AggClipRgn *pClipRgn, bool bRgbByteOrder)
void SetUniformOpaqueAlpha()
bool Create(int width, int height, FXDIB_Format format)
bool TransferBitmap(int width, int height, RetainPtr< const CFX_DIBBase > source, int src_left, int src_top)
pdfium::span< const uint8_t > GetBuffer() const
bool MultiplyAlphaMask(RetainPtr< const CFX_DIBitmap > mask)
pdfium::span< uint8_t > GetWritableScanline(int line)
bool ConvertColorScale(uint32_t forecolor, uint32_t backcolor)
bool ConvertFormat(FXDIB_Format format)
bool CompositeRect(int dest_left, int dest_top, int width, int height, uint32_t color)
pdfium::span< const uint8_t > GetScanline(int line) const override
size_t GetEstimatedImageMemoryBurden() const override
bool MultiplyAlpha(float alpha)
pdfium::span< T > GetWritableScanlineAs(int line)
pdfium::span< uint8_t > GetWritableBuffer()
bool Create(int width, int height, FXDIB_Format format, uint8_t *pBuffer, uint32_t pitch)
void TakeOver(RetainPtr< CFX_DIBitmap > &&pSrcBitmap)
void Clear(uint32_t color)
bool Copy(RetainPtr< const CFX_DIBBase > source)
void CompositeOneBPPMask(int dest_left, int dest_top, int width, int height, RetainPtr< const CFX_DIBBase > source, int src_left, int src_top)
static std::optional< PitchAndSize > CalculatePitchAndSize(int width, int height, FXDIB_Format format, uint32_t pitch)
FX_RECT ToRoundedFxRect() const
CFX_FloatRect(const FX_RECT &rect)
CFX_FloatRect & operator=(const CFX_FloatRect &that)=default
CFX_FloatRect TransformRect(const CFX_FloatRect &rect) const
const CFX_Matrix & matrix() const
static float TextUnitToGlyphUnit(float fTextUnit)
void Transform(CPDF_Font::FormIface *pForm, const CFX_Matrix &matrix)
void InitializeFromStreamData(bool bColored, pdfium::span< const float > pData)
RetainPtr< CFX_DIBitmap > GetBitmap()
static void TextUnitRectToGlyphUnitRect(CFX_FloatRect *pRect)
const FX_RECT & bbox() const
const CPDF_Font::FormIface * form() const
bool LoadBitmapFromSoleImageOfForm()
void SetForm(std::unique_ptr< CPDF_Font::FormIface > pForm)
#define UNSAFE_BUFFERS(...)
#define CONSTRUCT_VIA_MAKE_RETAIN
FX_RECT & operator=(const FX_RECT &that)=default