Subversion Repositories Scribus

Rev

Rev 3836 | Rev 4050 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2004 fschmid 1
#ifndef SCIMAGE_H
2
#define SCIMAGE_H
3
 
2688 craig 4
#include "scconfig.h"
2969 craig 5
#include "scribusapi.h"
2004 fschmid 6
 
7
#include <setjmp.h>
8
#include <cstdlib>
9
#include <cmath>
2702 craig 10
#ifdef HAVE_UNISTD_H
2004 fschmid 11
#include <unistd.h>
2702 craig 12
#endif
2082 fschmid 13
#include <valarray>
2004 fschmid 14
#include <qimage.h>
15
#include <qstring.h>
16
#include <qdatastream.h>
17
#include <qmap.h>
18
#include <qvaluelist.h>
19
#include <qfile.h>
20
#include <qdir.h>
21
#include <qstringlist.h>
22
#include "fpointarray.h"
2886 fschmid 23
#include "sccolor.h"
2004 fschmid 24
extern "C"
25
{
26
#define XMD_H           // shut JPEGlib up
27
#if defined(Q_OS_UNIXWARE)
28
#  define HAVE_BOOLEAN  // libjpeg under Unixware seems to need this
29
#endif
30
#include <jpeglib.h>
31
#include <jerror.h>
32
#undef HAVE_STDLIB_H
33
#ifdef const
34
#  undef const          // remove crazy C hackery in jconfig.h
35
#endif
36
}
37
#ifdef HAVE_TIFF
38
        #include <tiffio.h>
39
#endif
40
 
2969 craig 41
class SCRIBUS_API ScImage : public QImage
2004 fschmid 42
{
43
public:
44
        ScImage();
45
        ScImage(QImage image);
46
        ScImage( int width, int height );
47
        ~ScImage() {};
2082 fschmid 48
 
49
        enum ImageEffectCode
50
        {
51
                EF_INVERT = 0,
52
                EF_GRAYSCALE = 1,
53
                EF_COLORIZE = 2,
54
                EF_BRIGHTNESS = 3,
2092 fschmid 55
                EF_CONTRAST = 4,
2095 fschmid 56
                EF_SHARPEN = 5,
2096 fschmid 57
                EF_BLUR = 6,
58
                EF_SOLARIZE = 7
2082 fschmid 59
        };
2074 fschmid 60
        struct imageEffect
61
        {
62
                int effectCode;
63
                QString effectParameters;
64
        };
2012 fschmid 65
        void initialize();
2004 fschmid 66
        QString ImageToTxt();
67
        QString ImageToCMYK();
68
        QString ImageToGray();
69
        QString ImageToCMYK_PS(int pl, bool pre);
70
        QString ImageToCMYK_PDF(bool pre);
71
        void Convert2JPG(QString fn, int Quality, bool isCMYK, bool isGray);
72
        QString MaskToTxt(bool PDF = true);
73
        QString MaskToTxt14();
2886 fschmid 74
        void applyEffect(QValueList<imageEffect> effectsList, QMap<QString,ScColor> colors, bool cmyk);
2096 fschmid 75
        void solarize(double factor, bool cmyk);
2095 fschmid 76
        void blur(double radius= 0.0, double sigma = 1.0);
2092 fschmid 77
        void sharpen(double radius= 0.0, double sigma = 1.0);
2082 fschmid 78
        void contrast(int contrastValue, bool cmyk);
79
        void brightness(int brightnessValue, bool cmyk);
2057 fschmid 80
        void invert(bool cmyk);
2886 fschmid 81
        void colorize(ScColor color, int shade, bool cmyk);
2053 fschmid 82
        void toGrayscale(bool cmyk);
2012 fschmid 83
        void swapRGBA();
2025 fschmid 84
        void createLowRes(double scale);
2004 fschmid 85
        void scaleImage(int width, int height);
3009 fschmid 86
        void getEmbeddedProfile(QString fn, QString *profile, int *components);
2004 fschmid 87
        bool LoadPicture(QString fn, QString Prof, int rend, bool useEmbedded, bool useProf, int requestType, int gsRes, bool *realCMYK = 0);
2995 fschmid 88
        QString getAlpha(QString fn, bool PDF, bool pdf14, int gsRes = 72);
2004 fschmid 89
 
90
        enum PSDColorMode
91
        {
92
                CM_BITMAP = 0,
93
                CM_GRAYSCALE = 1,
94
                CM_INDEXED = 2,
95
                CM_RGB = 3,
96
                CM_CMYK = 4,
97
                CM_MULTICHANNEL = 7,
98
                CM_DUOTONE = 8,
99
                CM_LABCOLOR = 9
100
        };
101
 
102
        struct PSDHeader
103
        {
104
                uint signature;
105
                ushort version;
106
                uchar reserved[6];
107
                ushort channel_count;
108
                uint height;
109
                uint width;
110
                ushort depth;
111
                ushort color_mode;
112
        };
113
 
3703 fschmid 114
        struct PSDLayer
115
        {
116
                QValueList<uint> channelLen;
117
                QValueList<int> channelType;
118
                int xpos;
119
                int ypos;
120
                int width;
121
                int height;
122
                ushort opacity;
123
                uchar clipping;
124
                uchar flags;
3802 fschmid 125
                int maskXpos;
126
                int maskYpos;
127
                int maskWidth;
128
                int maskHeight;
3703 fschmid 129
                QString layerName;
130
                QString blend;
131
                QImage thumb;
132
        };
133
 
134
        struct LoadRequest
135
        {
136
                bool visible;
137
                ushort opacity;
138
                QString blend;
139
        };
140
 
141
        struct ExifValues
142
        {
3706 fschmid 143
                int width;
144
                int height;
3703 fschmid 145
                QString cameraName;
146
                QString cameraVendor;
3706 fschmid 147
                QString comment;
3751 fschmid 148
                QString userComment;
149
                QString artist;
150
                QString copyright;
151
                QString dateTime;
3703 fschmid 152
                QImage thumbnail;
153
        };
154
 
155
        struct ImageInfoRecord
156
        {
3751 fschmid 157
                int typ;                        /* 0 = jpg, 1 = tiff, 2 = psd, 3 = eps/ps, 4 = pdf, 5 = jpg2000, 6 = other */
3703 fschmid 158
                int xres;
159
                int yres;
160
                int colorspace; /* 0 = RGB  1 = CMYK  2 = Grayscale */
161
                bool valid;
162
                bool isRequest;
163
                bool progressive;
164
                bool isEmbedded;
165
                bool exifDataValid;
166
                int lowResType; /* 0 = full Resolution, 1 = 72 dpi, 2 = 36 dpi */
167
                double lowResScale;
168
                QMap<QString, FPointArray> PDSpathData;
169
                QMap<int, LoadRequest> RequestProps;
170
                QString clipPath;
171
                QString usedPath;
172
                QString profileName;
173
                QValueList<PSDLayer> layerInfo;
174
                ExifValues exifInfo;
175
        } imgInfo;
2004 fschmid 176
 
177
private:
2095 fschmid 178
        void liberateMemory(void **memory);
179
        void blurScanLine(double *kernel, int width, unsigned int *src, unsigned int *dest, int columns);
180
        int getBlurKernel(int width, double sigma, double **kernel);
2092 fschmid 181
        bool convolveImage(QImage *dest, const unsigned int order, const double *kernel);
182
        int getOptimalKernelWidth(double radius, double sigma);
2082 fschmid 183
        void applyCurve(bool cmyk);
2004 fschmid 184
        bool IsValid( const PSDHeader & header );
185
        bool IsSupported( const PSDHeader & header );
186
        unsigned char INT_MULT ( unsigned char a, unsigned char b );
187
        void RGBTOHSV ( uchar& red, uchar& green, uchar& blue );
188
        void HSVTORGB ( uchar& hue, uchar& saturation, uchar& value );
189
        void RGBTOHLS ( uchar& red, uchar& green, uchar& blue );
190
        int HLSVALUE ( double n1, double n2, double hue );
191
        void HLSTORGB ( uchar& hue, uchar& lightness, uchar& saturation );
3802 fschmid 192
        bool loadChannel( QDataStream & s, const PSDHeader & header, QValueList<PSDLayer> &layerInfo, uint layer, int channel, int component, QImage &tmpImg);
2004 fschmid 193
        bool loadLayerChannels( QDataStream & s, const PSDHeader & header, QValueList<PSDLayer> &layerInfo, uint layer, bool* firstLayer);
194
        bool loadLayer( QDataStream & s, const PSDHeader & header);
195
        QString getLayerString(QDataStream & s);
196
        QString getPascalString(QDataStream & s);
197
        void parseRessourceData( QDataStream & s, const PSDHeader & header, uint size);
198
        bool parseLayer( QDataStream & s, const PSDHeader & header);
199
        bool LoadPSD( QDataStream & s, const PSDHeader & header);
200
        bool marker_is_icc (jpeg_saved_marker_ptr marker);
201
        bool marker_is_photoshop (jpeg_saved_marker_ptr marker);
202
        bool read_jpeg_marker (UINT8 requestmarker, j_decompress_ptr cinfo, JOCTET **icc_data_ptr, unsigned int *icc_data_len);
2012 fschmid 203
        char* iccbuf;
204
        uint icclen;
2082 fschmid 205
        std::valarray<int> curveTable;
3836 fschmid 206
        QValueList<unsigned int> colorTable;
3905 fschmid 207
        int random_table[4096];
2004 fschmid 208
};
209
#endif