//======================================================================== // // SplashScreen.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) 2009, 2018, 2020 Albert Astals Cid // // 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 SPLASHSCREEN_H #define SPLASHSCREEN_H #include "SplashTypes.h" #include //------------------------------------------------------------------------ // SplashScreen //------------------------------------------------------------------------ class SplashScreen { public: SplashScreen(const SplashScreenParams *params); SplashScreen(SplashScreen *screen); ~SplashScreen(); SplashScreen(const SplashScreen &) = delete; SplashScreen &operator=(const SplashScreen &) = delete; SplashScreen *copy() { return new SplashScreen(this); } // Return the computed pixel value (0=black, 1=white) for the gray // level at (, ). int test(int x, int y, unsigned char value) { int xx, yy; if (mat == nullptr) createMatrix(); xx = x & sizeM1; yy = y & sizeM1; return value < mat[(yy << log2Size) + xx] ? 0 : 1; } // Returns true if value is above the white threshold or below the // black threshold, i.e., if the corresponding halftone will be // solid white or black. bool isStatic(unsigned char value) { if (mat == nullptr) createMatrix(); return value < minVal || value >= maxVal; } private: void createMatrix(); void buildDispersedMatrix(int i, int j, int val, int delta, int offset); void buildClusteredMatrix(); int distance(int x0, int y0, int x1, int y1); void buildSCDMatrix(int r); const SplashScreenParams *screenParams; // params to create the other members unsigned char *mat; // threshold matrix int size; // size of the threshold matrix int sizeM1; // size - 1 int log2Size; // log2(size) unsigned char minVal; // any pixel value below minVal generates // solid black unsigned char maxVal; // any pixel value above maxVal generates // solid white }; #endif