File indexing completed on 2025-12-11 10:26:10
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033 #ifndef SPLASHBITMAP_H
0034 #define SPLASHBITMAP_H
0035
0036 #include "SplashTypes.h"
0037 #include "poppler_private_export.h"
0038 #include <cstdio>
0039 #include <string>
0040 #include <vector>
0041
0042 class ImgWriter;
0043 class GfxSeparationColorSpace;
0044
0045
0046
0047
0048
0049 class POPPLER_PRIVATE_EXPORT SplashBitmap
0050 {
0051 public:
0052
0053
0054
0055
0056 SplashBitmap(int widthA, int heightA, int rowPad, SplashColorMode modeA, bool alphaA, bool topDown = true, const std::vector<GfxSeparationColorSpace *> *separationList = nullptr);
0057 static SplashBitmap *copy(const SplashBitmap *src);
0058
0059 ~SplashBitmap();
0060
0061 SplashBitmap(const SplashBitmap &) = delete;
0062 SplashBitmap &operator=(const SplashBitmap &) = delete;
0063
0064 int getWidth() const { return width; }
0065 int getHeight() const { return height; }
0066 int getRowSize() const { return rowSize; }
0067 int getAlphaRowSize() const { return width; }
0068 int getRowPad() const { return rowPad; }
0069 SplashColorMode getMode() const { return mode; }
0070 SplashColorPtr getDataPtr() { return data; }
0071 unsigned char *getAlphaPtr() { return alpha; }
0072 std::vector<GfxSeparationColorSpace *> *getSeparationList() { return separationList; }
0073 SplashColorConstPtr getDataPtr() const { return data; }
0074 const unsigned char *getAlphaPtr() const { return alpha; }
0075 const std::vector<GfxSeparationColorSpace *> *getSeparationList() const { return separationList; }
0076
0077 SplashError writePNMFile(char *fileName);
0078 SplashError writePNMFile(FILE *f);
0079 SplashError writeAlphaPGMFile(char *fileName);
0080
0081 struct WriteImgParams
0082 {
0083 int jpegQuality = -1;
0084 bool jpegProgressive = false;
0085 std::string tiffCompression;
0086 bool jpegOptimize = false;
0087 };
0088
0089 SplashError writeImgFile(SplashImageFileFormat format, const char *fileName, double hDPI, double vDPI, WriteImgParams *params = nullptr);
0090 SplashError writeImgFile(SplashImageFileFormat format, FILE *f, double hDPI, double vDPI, WriteImgParams *params = nullptr);
0091 SplashError writeImgFile(ImgWriter *writer, FILE *f, double hDPI, double vDPI, SplashColorMode imageWriterFormat);
0092
0093 enum ConversionMode
0094 {
0095 conversionOpaque,
0096 conversionAlpha,
0097 conversionAlphaPremultiplied
0098 };
0099
0100 bool convertToXBGR(ConversionMode conversionMode = conversionOpaque);
0101
0102 void getPixel(int x, int y, SplashColorPtr pixel);
0103 void getRGBLine(int y, SplashColorPtr line);
0104 void getXBGRLine(int y, SplashColorPtr line, ConversionMode conversionMode = conversionOpaque);
0105 void getCMYKLine(int y, SplashColorPtr line);
0106 unsigned char getAlpha(int x, int y);
0107
0108
0109
0110
0111 SplashColorPtr takeData();
0112
0113 private:
0114 int width, height;
0115 int rowPad;
0116 int rowSize;
0117
0118 SplashColorMode mode;
0119 SplashColorPtr data;
0120 unsigned char *alpha;
0121
0122 std::vector<GfxSeparationColorSpace *> *separationList;
0123
0124 friend class Splash;
0125
0126 void setJpegParams(ImgWriter *writer, WriteImgParams *params);
0127 };
0128
0129 #endif