Spaces:
Running
Running
File size: 5,300 Bytes
5cee033 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
//========================================================================
//
// SplashBitmap.h
//
//========================================================================
//========================================================================
//
// Modified under the Poppler project - http://poppler.freedesktop.org
//
// All changes made under the Poppler project to this file are licensed
// under GPL version 2 or later
//
// Copyright (C) 2007 Ilmari Heikkinen <[email protected]>
// Copyright (C) 2009 Shen Liang <[email protected]>
// Copyright (C) 2009, 2012, 2018, 2021, 2022 Albert Astals Cid <[email protected]>
// Copyright (C) 2009 Stefan Thomas <[email protected]>
// Copyright (C) 2010, 2017 Adrian Johnson <[email protected]>
// Copyright (C) 2010 Harry Roberts <[email protected]>
// Copyright (C) 2010 Christian Feuersänger <[email protected]>
// Copyright (C) 2010 William Bader <[email protected]>
// Copyright (C) 2012 Thomas Freitag <[email protected]>
// Copyright (C) 2015 Adam Reichold <[email protected]>
// Copyright (C) 2016 Kenji Uno <[email protected]>
// Copyright (C) 2018 Martin Packman <[email protected]>
// Copyright (C) 2019 Oliver Sander <[email protected]>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
//
//========================================================================
#ifndef SPLASHBITMAP_H
#define SPLASHBITMAP_H
#include "SplashTypes.h"
#include "poppler_private_export.h"
#include <cstdio>
#include <string>
#include <vector>
class ImgWriter;
class GfxSeparationColorSpace;
//------------------------------------------------------------------------
// SplashBitmap
//------------------------------------------------------------------------
class POPPLER_PRIVATE_EXPORT SplashBitmap
{
public:
// Create a new bitmap. It will have <widthA> x <heightA> pixels in
// color mode <modeA>. Rows will be padded out to a multiple of
// <rowPad> bytes. If <topDown> is false, the bitmap will be stored
// upside-down, i.e., with the last row first in memory.
SplashBitmap(int widthA, int heightA, int rowPad, SplashColorMode modeA, bool alphaA, bool topDown = true, const std::vector<GfxSeparationColorSpace *> *separationList = nullptr);
static SplashBitmap *copy(const SplashBitmap *src);
~SplashBitmap();
SplashBitmap(const SplashBitmap &) = delete;
SplashBitmap &operator=(const SplashBitmap &) = delete;
int getWidth() const { return width; }
int getHeight() const { return height; }
int getRowSize() const { return rowSize; }
int getAlphaRowSize() const { return width; }
int getRowPad() const { return rowPad; }
SplashColorMode getMode() const { return mode; }
SplashColorPtr getDataPtr() { return data; }
unsigned char *getAlphaPtr() { return alpha; }
std::vector<GfxSeparationColorSpace *> *getSeparationList() { return separationList; }
SplashColorConstPtr getDataPtr() const { return data; }
const unsigned char *getAlphaPtr() const { return alpha; }
const std::vector<GfxSeparationColorSpace *> *getSeparationList() const { return separationList; }
SplashError writePNMFile(char *fileName);
SplashError writePNMFile(FILE *f);
SplashError writeAlphaPGMFile(char *fileName);
struct WriteImgParams
{
int jpegQuality = -1;
bool jpegProgressive = false;
std::string tiffCompression;
bool jpegOptimize = false;
};
SplashError writeImgFile(SplashImageFileFormat format, const char *fileName, double hDPI, double vDPI, WriteImgParams *params = nullptr);
SplashError writeImgFile(SplashImageFileFormat format, FILE *f, double hDPI, double vDPI, WriteImgParams *params = nullptr);
SplashError writeImgFile(ImgWriter *writer, FILE *f, double hDPI, double vDPI, SplashColorMode imageWriterFormat);
enum ConversionMode
{
conversionOpaque,
conversionAlpha,
conversionAlphaPremultiplied
};
bool convertToXBGR(ConversionMode conversionMode = conversionOpaque);
void getPixel(int x, int y, SplashColorPtr pixel);
void getRGBLine(int y, SplashColorPtr line);
void getXBGRLine(int y, SplashColorPtr line, ConversionMode conversionMode = conversionOpaque);
void getCMYKLine(int y, SplashColorPtr line);
unsigned char getAlpha(int x, int y);
// Caller takes ownership of the bitmap data. The SplashBitmap
// object is no longer valid -- the next call should be to the
// destructor.
SplashColorPtr takeData();
private:
int width, height; // size of bitmap
int rowPad;
int rowSize; // size of one row of data, in bytes
// - negative for bottom-up bitmaps
SplashColorMode mode; // color mode
SplashColorPtr data; // pointer to row zero of the color data
unsigned char *alpha; // pointer to row zero of the alpha data
// (always top-down)
std::vector<GfxSeparationColorSpace *> *separationList; // list of spot colorants and their mapping functions
friend class Splash;
void setJpegParams(ImgWriter *writer, WriteImgParams *params);
};
#endif
|