25 typedef unsigned char Byte;
42 0, 5, 8, 13, 20, 27, 38, 47,
43 50, 54, 58, 65, 72, 76, 83, 87,
44 91, 98,105,112,119,126,133,140,
45 147,154,161,164,167,174,181,188,
46 195,207,216,224,233,242,250,258,
47 267,276,279,286,294,301,312,321,
48 331,339,349,357,365,372,380,389,
49 400,409,418,427,430,434,437,443,
50 450,453,460,467,474,481,488,492,
51 499,506,509,512,518,521,530,537,
52 544,551,557,562,568,571,578,585,
53 594,600,607,613,617,620,624,631
58 5, 3, 5, 7, 7,11, 9, 3,
59 4, 4, 7, 7, 4, 7, 4, 4,
61 7, 7, 7, 7, 7, 7, 7, 7,
62 7, 7, 3, 3, 7, 7, 7, 7,
63 12, 9, 8, 9, 9, 8, 8, 9,
64 9, 3, 7, 8, 7,11, 9,10,
65 8,10, 8, 8, 7, 8, 9,11,
66 9, 9, 9, 3, 4, 3, 6, 7,
67 3, 7, 7, 7, 7, 7, 4, 7,
68 7, 3, 3, 6, 3, 9, 7, 7,
69 7, 6, 5, 6, 3, 7, 7, 9,
70 6, 7, 6, 4, 3, 4, 7, 5
74 0x02, 0x50, 0x01, 0x06, 0x20, 0x60, 0xc6, 0x04, 0x00, 0x00, 0x00, 0x27,
75 0x04, 0x1c, 0x38, 0x11, 0xf1, 0xc7, 0xc7, 0x0e, 0x00, 0x00, 0x00, 0x03,
76 0x81, 0xf0, 0x10, 0x7c, 0x1e, 0x3e, 0x1f, 0x9f, 0x87, 0x88, 0x24, 0x09,
77 0x09, 0x02, 0x02, 0x41, 0x0f, 0x0f, 0x83, 0xc3, 0xe1, 0xe7, 0xf4, 0x24,
78 0x12, 0x22, 0x41, 0x20, 0x9f, 0xce, 0x30, 0x00, 0x10, 0x04, 0x00, 0x01,
79 0x00, 0x30, 0x08, 0x12, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
80 0x00, 0x00, 0x00, 0x00, 0x01, 0xac, 0x00, 0x00, 0x02, 0x51, 0x43, 0x89,
81 0x40, 0x90, 0x49, 0x15, 0x00, 0x00, 0x00, 0x28, 0x9c, 0x22, 0x44, 0x31,
82 0x02, 0x20, 0x48, 0x91, 0x00, 0x00, 0x00, 0x04, 0x46, 0x08, 0x28, 0x42,
83 0x21, 0x21, 0x10, 0x10, 0x08, 0x48, 0x24, 0x09, 0x11, 0x03, 0x06, 0x61,
84 0x10, 0x88, 0x44, 0x22, 0x12, 0x10, 0x84, 0x24, 0x12, 0x22, 0x22, 0x20,
85 0x80, 0x4a, 0x11, 0x00, 0x20, 0x04, 0x00, 0x01, 0x00, 0x40, 0x08, 0x00,
86 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
87 0x02, 0x22, 0x00, 0x00, 0x02, 0x51, 0x45, 0x49, 0x40, 0x90, 0x89, 0x0a,
88 0x00, 0x00, 0x00, 0x48, 0x84, 0x02, 0x04, 0x51, 0x02, 0x00, 0x88, 0x91,
89 0x00, 0x00, 0x00, 0x04, 0x44, 0xd4, 0x28, 0x42, 0x40, 0x20, 0x90, 0x10,
90 0x10, 0x08, 0x24, 0x09, 0x21, 0x03, 0x06, 0x51, 0x20, 0x48, 0x48, 0x12,
91 0x12, 0x00, 0x84, 0x22, 0x22, 0x22, 0x22, 0x11, 0x00, 0x89, 0x12, 0x80,
92 0x31, 0xc5, 0x87, 0x0d, 0x1c, 0xe3, 0x4b, 0x12, 0x49, 0x29, 0x16, 0x1c,
93 0x58, 0x69, 0x4c, 0xe8, 0x91, 0x44, 0x61, 0x44, 0xf2, 0x22, 0x00, 0x00,
94 0x02, 0x07, 0xe5, 0x06, 0x80, 0x60, 0x10, 0x95, 0x08, 0x00, 0x00, 0x48,
95 0x84, 0x04, 0x18, 0x51, 0xe2, 0xc0, 0x87, 0x11, 0x24, 0x18, 0x03, 0x00,
96 0x89, 0x24, 0x44, 0x42, 0x40, 0x20, 0x90, 0x10, 0x10, 0x08, 0x24, 0x09,
97 0x41, 0x02, 0x8a, 0x51, 0x20, 0x48, 0x48, 0x12, 0x11, 0x80, 0x84, 0x22,
98 0x21, 0x24, 0x14, 0x11, 0x01, 0x09, 0x14, 0x40, 0x02, 0x26, 0x48, 0x93,
99 0x22, 0x44, 0xcc, 0x92, 0x51, 0x36, 0x99, 0x22, 0x64, 0x99, 0x92, 0x48,
100 0x91, 0x44, 0x52, 0x44, 0x12, 0x22, 0x00, 0x00, 0x02, 0x01, 0x43, 0x80,
101 0x80, 0xa0, 0x10, 0x84, 0x08, 0x00, 0x00, 0x88, 0x84, 0x08, 0x04, 0x90,
102 0x13, 0x21, 0x08, 0x8f, 0x00, 0x61, 0xf0, 0xc0, 0x8a, 0x24, 0x44, 0x7c,
103 0x40, 0x20, 0x9f, 0x9f, 0x11, 0xcf, 0xe4, 0x09, 0xc1, 0x02, 0x8a, 0x49,
104 0x20, 0x4f, 0x88, 0x13, 0xe0, 0x60, 0x84, 0x22, 0x21, 0x54, 0x08, 0x0a,
105 0x02, 0x08, 0x90, 0x00, 0x00, 0x24, 0x48, 0x11, 0x22, 0x44, 0x48, 0x92,
106 0x61, 0x24, 0x91, 0x22, 0x44, 0x89, 0x10, 0x48, 0x91, 0x24, 0x8c, 0x44,
107 0x22, 0x22, 0x64, 0x00, 0x02, 0x07, 0xe1, 0x41, 0x31, 0x14, 0x10, 0x80,
108 0x3e, 0x07, 0xc0, 0x88, 0x84, 0x10, 0x05, 0x10, 0x12, 0x21, 0x08, 0x81,
109 0x01, 0x80, 0x00, 0x31, 0x0a, 0x24, 0x7c, 0x42, 0x40, 0x20, 0x90, 0x10,
110 0x10, 0x48, 0x24, 0x09, 0x21, 0x02, 0x52, 0x45, 0x20, 0x48, 0x08, 0x92,
111 0x20, 0x10, 0x84, 0x21, 0x41, 0x54, 0x14, 0x04, 0x04, 0x08, 0x90, 0x00,
112 0x01, 0xe4, 0x48, 0x11, 0x3e, 0x44, 0x48, 0x92, 0x61, 0x24, 0x91, 0x22,
113 0x44, 0x89, 0x0c, 0x48, 0x8a, 0x24, 0x8c, 0x48, 0x44, 0x21, 0x98, 0x00,
114 0x02, 0x02, 0x85, 0x41, 0x49, 0x08, 0x10, 0x80, 0x08, 0x00, 0x00, 0x88,
115 0x84, 0x20, 0x45, 0xf9, 0x12, 0x21, 0x08, 0x81, 0x00, 0x61, 0xf0, 0xc1,
116 0x0a, 0x68, 0x82, 0x42, 0x40, 0x20, 0x90, 0x10, 0x10, 0x48, 0x24, 0x89,
117 0x11, 0x02, 0x52, 0x45, 0x20, 0x48, 0x08, 0x52, 0x12, 0x10, 0x84, 0x21,
118 0x40, 0x88, 0x22, 0x04, 0x08, 0x08, 0x90, 0x00, 0x02, 0x24, 0x48, 0x11,
119 0x20, 0x44, 0x48, 0x92, 0x51, 0x24, 0x91, 0x22, 0x44, 0x89, 0x02, 0x48,
120 0x8a, 0x2a, 0x92, 0x28, 0x42, 0x22, 0x00, 0x00, 0x00, 0x02, 0x85, 0x41,
121 0x49, 0x18, 0x10, 0x80, 0x08, 0x00, 0x01, 0x08, 0x84, 0x20, 0x44, 0x11,
122 0x12, 0x22, 0x08, 0x91, 0x00, 0x18, 0x03, 0x00, 0x09, 0xb0, 0x82, 0x42,
123 0x21, 0x21, 0x10, 0x10, 0x08, 0xc8, 0x24, 0x89, 0x09, 0x02, 0x22, 0x43,
124 0x10, 0x88, 0x04, 0x22, 0x12, 0x10, 0x84, 0x20, 0x80, 0x88, 0x22, 0x04,
125 0x10, 0x08, 0x50, 0x00, 0x02, 0x26, 0x48, 0x93, 0x22, 0x44, 0xc8, 0x92,
126 0x49, 0x24, 0x91, 0x22, 0x64, 0x99, 0x12, 0x49, 0x84, 0x11, 0x21, 0x28,
127 0x82, 0x22, 0x00, 0x00, 0x02, 0x02, 0x83, 0x82, 0x30, 0xe4, 0x10, 0x80,
128 0x00, 0x20, 0x05, 0x07, 0x04, 0x3e, 0x38, 0x10, 0xe1, 0xc2, 0x07, 0x0e,
129 0x24, 0x00, 0x00, 0x01, 0x04, 0x00, 0x82, 0x7c, 0x1e, 0x3e, 0x1f, 0x90,
130 0x07, 0x48, 0x24, 0x71, 0x05, 0xf2, 0x22, 0x41, 0x0f, 0x08, 0x03, 0xd2,
131 0x11, 0xe0, 0x83, 0xc0, 0x80, 0x88, 0x41, 0x04, 0x1f, 0xc8, 0x50, 0x00,
132 0x01, 0xd5, 0x87, 0x0d, 0x1c, 0x43, 0x48, 0x92, 0x45, 0x24, 0x91, 0x1c,
133 0x58, 0x69, 0x0c, 0x66, 0x84, 0x11, 0x21, 0x10, 0xf2, 0x22, 0x00, 0x00,
134 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00,
135 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
136 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
139 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00,
140 0x00, 0x00, 0x00, 0x10, 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141 0x00, 0x00, 0x09, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145 0x00, 0x08, 0x10, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x02,
146 0x00, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
147 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x00,
152 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00,
153 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0xac, 0x00, 0x00
158 { 0xff, 0xff, 0xff, 0x00 },
159 { 0x00, 0x00, 0x00, 0xff },
160 { 0xff, 0xff, 0xc0, 0xff },
161 { 0x9f, 0x9f, 0x60, 0xff },
162 { 0x90, 0x00, 0x00, 0xff },
163 { 0x00, 0x90, 0x00, 0xff },
164 { 0x00, 0x00, 0x90, 0xff },
165 { 0xc0, 0xc0, 0xc0, 0xff }
171 { 0x00, 0x00, 0x00, 0x00 },
172 { 0x00, 0x00, 0x00, 0x2e },
173 { 0x00, 0x00, 0x00, 0x48 },
174 { 0x00, 0x00, 0x00, 0x5d },
175 { 0x00, 0x00, 0x00, 0x6f },
176 { 0x00, 0x00, 0x00, 0x80 },
177 { 0x00, 0x00, 0x00, 0x8f },
178 { 0x00, 0x00, 0x00, 0x9e },
179 { 0x00, 0x00, 0x00, 0xac },
180 { 0x00, 0x00, 0x00, 0xb9 },
181 { 0x00, 0x00, 0x00, 0xc5 },
182 { 0x00, 0x00, 0x00, 0xd2 },
183 { 0x00, 0x00, 0x00, 0xdd },
184 { 0x00, 0x00, 0x00, 0xe9 },
185 { 0x00, 0x00, 0x00, 0xf4 },
186 { 0x00, 0x00, 0x00, 0xff }
191 { 0xff, 0xff, 0xff, 0xff },
192 { 0xe0, 0xe0, 0xe0, 0xff },
193 { 0xd0, 0xd0, 0xd0, 0xff },
194 { 0xc0, 0xc0, 0xc0, 0xff },
195 { 0xb0, 0xb0, 0xb0, 0xff },
196 { 0xa0, 0xa0, 0xa0, 0xff },
197 { 0x90, 0x90, 0x90, 0xff },
198 { 0x80, 0x80, 0x80, 0xff },
199 { 0x70, 0x70, 0x70, 0xff },
200 { 0x60, 0x60, 0x60, 0xff },
201 { 0x50, 0x50, 0x50, 0xff },
202 { 0x40, 0x40, 0x40, 0xff },
203 { 0x30, 0x30, 0x30, 0xff },
204 { 0x20, 0x20, 0x20, 0xff },
205 { 0x10, 0x10, 0x10, 0xff },
206 { 0x00, 0x00, 0x00, 0xff }
216 double red1,green1,blue1;
217 double red2,green2,blue2;
221 pow(235/255.0,gamma/100.0),
227 pow(138/255.0,gamma/100.0),
231 palette[2].
red = (
int)(red1 * 255.0);
232 palette[2].
green = (
int)(green1 * 255.0);
233 palette[2].
blue = (
int)(blue1 * 255.0);
235 palette[3].
red = (
int)(red2 * 255.0);
236 palette[3].
green = (
int)(green2 * 255.0);
237 palette[3].
blue = (
int)(blue2 * 255.0);
252 if (x>=0 && x<width && y>=0 && y<height)
258 if (x>=0 && x<width && y>=0 && y<height)
259 return data[y*width+
x];
274 unsigned short bitPattern=0;
276 int byteOffset = rowOffset+(cp>>3);
277 int bitOffset = cp&7;
281 int bits=8-bitOffset;
282 if (bits>bitsLeft) bits=bitsLeft;
284 bitPattern|=((
fontRaw[byteOffset]<<bitOffset)&0xff)>>(8-bits);
291 for (xf=0;xf<cw;xf++)
293 setPixel(x+xf,y+yf,(bitPattern&mask) ? fg : getPixel(x+xf,y+yf));
328 for (x=xs;x<=xe;x++,j++)
331 if (mask&(1<<(i&0x1f))) setPixel(x,y,colIndex);
337 drawHorzLine(y,xs,xe,colIndex,mask);
342 drawVertLine(xe-i,y-h,y+h,colIndex,0xffffffff);
349 for (y=ys;y<=ye;y++,i++)
351 if (mask&(1<<(i&0x1f))) setPixel(x,y,colIndex);
357 drawVertLine(x,ys,ye,colIndex,mask);
362 drawHorzLine(ys+i,x-h,x+h,colIndex,0xffffffff);
368 drawHorzLine(y,x,x+w-1,colIndex,mask);
369 drawHorzLine(y+h-1,x,x+w-1,colIndex,mask);
370 drawVertLine(x,y,y+h-1,colIndex,mask);
371 drawVertLine(x+w-1,y,y+h-1,colIndex,mask);
377 for (yp=y,yi=0;yp<y+lheight;yp++,yi++)
378 for (xp=x,xi=0;xp<x+lwidth;xp++,xi++)
379 if (mask&(1<<((xi+yi)&0x1f)))
380 setPixel(xp,yp,colIndex);
386 GifEncoder gifenc(
data,
387 mode==0 ? palette : palette2,
394 gifenc.writeGIF(file);
402 static bool useTransparency =
Config_getBool(
"FORMULA_TRANSPARENT");
407 int numCols = mode==0 ? 8 : 16;
408 Color *pPal = mode==0 ? palette :
409 useTransparency ? palette2 :
412 for (i=0;i<numCols;i++,pPal++)
429 double *pRed,
double *pGreen,
double *pBlue)
437 v = (l <= 0.5) ? (l * (1.0 +
s)) : (l + s - l *
s);
443 double fract, vsf, mid1, mid2;
450 vsf = v * sv * fract;
493 const uchar *greyLevels,
const uchar *alphaLevels,
494 int saturation,
int hue,
int gamma)
496 m_hasAlpha = alphaLevels!=0;
499 m_data = (
uchar*)malloc(width*height*4);
501 for (i=0;i<width*height;i++)
507 pow(greyLevels[i]/255.0,gamma/100.0),
509 r = (
int)(red *255.0);
510 g = (
int)(green*255.0);
511 b = (
int)(blue *255.0);
512 a = alphaLevels ? alphaLevels[i] : 255;
533 LodePNG_encode(&encoder, &buffer, &bufferSize, m_data, m_width, m_height);
unsigned char fontRaw[charSetWidth *charHeight]
unsigned short charPos[numChars]
void writeChar(int x, int y, char c, uchar fg)
void fillRect(int x, int y, int width, int height, uchar colIndex, uint mask)
void setPixel(int x, int y, uchar val)
static constexpr double g
void drawHorzArrow(int y, int xs, int xe, uchar colIndex, uint mask)
bool save(const char *fileName)
void drawHorzLine(int y, int xs, int xe, uchar colIndex, uint mask)
friend uint stringLength(const char *s)
void LodePNG_Encoder_init(LodePNG_Encoder *encoder)
static void hsl2rgb(double h, double s, double l, double *pRed, double *pGreen, double *pBlue)
unsigned char charWidth[numChars]
void LodePNG_encode(LodePNG_Encoder *encoder, unsigned char **out, size_t *outsize, const unsigned char *image, unsigned w, unsigned h)
bool save(const char *fileName, int mode=0)
void writeString(int x, int y, const char *s, uchar fg)
#define Config_getInt(val)
ColoredImage(int width, int height, const uchar *greyLevels, const uchar *alphaLevels, int saturation, int hue, int gamma)
unsigned LodePNG_InfoColor_addPalette(LodePNG_InfoColor *info, unsigned char r, unsigned char g, unsigned char b, unsigned char a)
void LodePNG_Encoder_cleanup(LodePNG_Encoder *encoder)
void drawRect(int x, int y, int width, int height, uchar colIndex, uint mask)
#define Config_getBool(val)
double gamma(double KE, const simb::MCParticle *part)
unsigned LodePNG_saveFile(const unsigned char *buffer, size_t buffersize, const char *filename)
The QFile class is an I/O device that operates on files.
void drawVertArrow(int x, int ys, int ye, uchar colIndex, uint mask)
void drawVertLine(int x, int ys, int ye, uchar colIndex, uint mask)
static constexpr double ys
static QFile::EncoderFn encoder
uchar getPixel(int x, int y) const
void hsl2rgb(double h, double s, double l, double *pRed, double *pGreen, double *pBlue)