Spaces:
Running
Running
//======================================================================== | |
// | |
// ImageOutputDev.h | |
// | |
// Copyright 1998-2003 Glyph & Cog, LLC | |
// | |
//======================================================================== | |
//======================================================================== | |
// | |
// 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) 2006 Rainer Keller <[email protected]> | |
// Copyright (C) 2008 Timothy Lee <[email protected]> | |
// Copyright (C) 2009 Carlos Garcia Campos <[email protected]> | |
// Copyright (C) 2010 Jakob Voss <[email protected]> | |
// Copyright (C) 2012, 2013, 2017 Adrian Johnson <[email protected]> | |
// Copyright (C) 2013 Thomas Freitag <[email protected]> | |
// Copyright (C) 2018, 2019, 2021, 2024 Albert Astals Cid <[email protected]> | |
// Copyright (C) 2024 Fernando Herrera <[email protected]> | |
// Copyright (C) 2024 Sebastian J. Bronner <[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 | |
// | |
//======================================================================== | |
class GfxState; | |
//------------------------------------------------------------------------ | |
// ImageOutputDev | |
//------------------------------------------------------------------------ | |
class ImageOutputDev : public OutputDev | |
{ | |
public: | |
enum ImageType | |
{ | |
imgImage, | |
imgStencil, | |
imgMask, | |
imgSmask | |
}; | |
enum ImageFormat | |
{ | |
imgRGB, | |
imgRGB48, | |
imgGray, | |
imgMonochrome, | |
imgCMYK | |
}; | |
// Create an OutputDev which will write images to files named | |
// <fileRoot>-NNN.<type> or <fileRoot>-PPP-NNN.<type>, if | |
// <pageNames> is set. Normally, all images are written as PBM | |
// (.pbm) or PPM (.ppm) files unless PNG or Tiff output is enabled | |
// (PNG is used if both are enabled). If Jpeg is enabled, JPEG images | |
// are written as JPEG (.jpg) files. | |
ImageOutputDev(char *fileRootA, bool pageNamesA, bool listImagesA); | |
// Destructor. | |
~ImageOutputDev() override; | |
// Use PNG format for output | |
void enablePNG(bool png) { outputPNG = png; } | |
// Use TIFF format for output | |
void enableTiff(bool tiff) { outputTiff = tiff; } | |
// Use Jpeg format for Jpeg files | |
void enableJpeg(bool jpeg) { dumpJPEG = jpeg; } | |
// Use Jpeg2000 format for Jpeg2000 files | |
void enableJpeg2000(bool jp2) { dumpJP2 = jp2; } | |
// Use JBIG2 format for JBIG2 files | |
void enableJBig2(bool jbig2) { dumpJBIG2 = jbig2; } | |
// Use CCITT format for CCITT files | |
void enableCCITT(bool ccitt) { dumpCCITT = ccitt; } | |
// Print filenames to stdout after writing | |
void enablePrintFilenames(bool filenames) { printFilenames = filenames; } | |
// Get the error code | |
// 0 = No error, 1 = Error opening a PDF file, 2 = Error opening an output file, 3 = Error related to PDF permissions, 99 = Other error. | |
int getErrorCode() const { return errorCode; } | |
// Check if file was successfully created. | |
virtual bool isOk() { return errorCode == 0; } | |
// Does this device use tilingPatternFill()? If this returns false, | |
// tiling pattern fills will be reduced to a series of other drawing | |
// operations. | |
bool useTilingPatternFill() override { return true; } | |
// Does this device use beginType3Char/endType3Char? Otherwise, | |
// text in Type 3 fonts will be drawn with drawChar/drawString. | |
bool interpretType3Chars() override { return false; } | |
// Does this device need non-text content? | |
bool needNonText() override { return true; } | |
// Start a page | |
void startPage(int pageNumA, GfxState *state, XRef *xref) override { pageNum = pageNumA; } | |
//---- get info about output device | |
// Does this device use upside-down coordinates? | |
// (Upside-down means (0,0) is the top left corner of the page.) | |
bool upsideDown() override { return true; } | |
// Does this device use drawChar() or drawString()? | |
bool useDrawChar() override { return false; } | |
//----- path painting | |
bool tilingPatternFill(GfxState *state, Gfx *gfx, Catalog *cat, GfxTilingPattern *tPat, const double *mat, int x0, int y0, int x1, int y1, double xStep, double yStep) override; | |
//----- image drawing | |
void drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, bool invert, bool interpolate, bool inlineImg) override; | |
void drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, bool interpolate, const int *maskColors, bool inlineImg) override; | |
void drawMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, bool interpolate, Stream *maskStr, int maskWidth, int maskHeight, bool maskInvert, bool maskInterpolate) override; | |
void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, bool interpolate, Stream *maskStr, int maskWidth, int maskHeight, GfxImageColorMap *maskColorMap, | |
bool maskInterpolate) override; | |
private: | |
// Sets the output filename with a given file extension | |
void setFilename(const char *fileExt); | |
void listImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, bool interpolate, bool inlineImg, ImageType imageType); | |
void writeImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, bool inlineImg); | |
void writeRawImage(Stream *str, const char *ext); | |
void writeImageFile(ImgWriter *writer, ImageFormat format, const char *ext, Stream *str, int width, int height, GfxImageColorMap *colorMap); | |
long getInlineImageLength(Stream *str, int width, int height, GfxImageColorMap *colorMap); | |
char *fileRoot; // root of output file names | |
char *fileName; // buffer for output file names | |
bool listImages; // list images instead of dumping | |
bool dumpJPEG; // set to dump native JPEG files | |
bool dumpJP2; // set to dump native JPEG2000 files | |
bool dumpJBIG2; // set to dump native JBIG2 files | |
bool dumpCCITT; // set to dump native CCITT files | |
bool outputPNG; // set to output in PNG format | |
bool outputTiff; // set to output in TIFF format | |
bool pageNames; // set to include page number in file names | |
bool printFilenames; // set to print image filenames to stdout after writing | |
int pageNum; // current page number | |
int imgNum; // current image number | |
int errorCode; // code for any error creating the output files | |
}; | |