Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/gui/image/qppmhandler.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||||||||||||||||||||
2 | - | |||||||||||||||||||||||||||||||||||||
3 | - | |||||||||||||||||||||||||||||||||||||
4 | - | |||||||||||||||||||||||||||||||||||||
5 | - | |||||||||||||||||||||||||||||||||||||
6 | - | |||||||||||||||||||||||||||||||||||||
7 | - | |||||||||||||||||||||||||||||||||||||
8 | - | |||||||||||||||||||||||||||||||||||||
9 | - | |||||||||||||||||||||||||||||||||||||
10 | - | |||||||||||||||||||||||||||||||||||||
11 | - | |||||||||||||||||||||||||||||||||||||
12 | static void discard_pbm_line(QIODevice *d) | - | ||||||||||||||||||||||||||||||||||||
13 | { | - | ||||||||||||||||||||||||||||||||||||
14 | const int buflen = 100; | - | ||||||||||||||||||||||||||||||||||||
15 | char buf[buflen]; | - | ||||||||||||||||||||||||||||||||||||
16 | int res = 0; | - | ||||||||||||||||||||||||||||||||||||
17 | do { | - | ||||||||||||||||||||||||||||||||||||
18 | res = d->readLine(buf, buflen); | - | ||||||||||||||||||||||||||||||||||||
19 | } never executed: while (res > 0end of block
| 0 | ||||||||||||||||||||||||||||||||||||
20 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
21 | - | |||||||||||||||||||||||||||||||||||||
22 | static int read_pbm_int(QIODevice *d) | - | ||||||||||||||||||||||||||||||||||||
23 | { | - | ||||||||||||||||||||||||||||||||||||
24 | char c; | - | ||||||||||||||||||||||||||||||||||||
25 | int val = -1; | - | ||||||||||||||||||||||||||||||||||||
26 | bool digit; | - | ||||||||||||||||||||||||||||||||||||
27 | for (;;) { | - | ||||||||||||||||||||||||||||||||||||
28 | if (!d->getChar(&c)
| 0 | ||||||||||||||||||||||||||||||||||||
29 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
30 | digit = isdigit((uchar) c); | - | ||||||||||||||||||||||||||||||||||||
31 | if (val != -1
| 0 | ||||||||||||||||||||||||||||||||||||
32 | if (digit
| 0 | ||||||||||||||||||||||||||||||||||||
33 | val = 10*val + c - '0'; | - | ||||||||||||||||||||||||||||||||||||
34 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||||||||||||||
35 | } else { | - | ||||||||||||||||||||||||||||||||||||
36 | if (c == '#'
| 0 | ||||||||||||||||||||||||||||||||||||
37 | discard_pbm_line(d); never executed: discard_pbm_line(d); | 0 | ||||||||||||||||||||||||||||||||||||
38 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
39 | } | - | ||||||||||||||||||||||||||||||||||||
40 | } | - | ||||||||||||||||||||||||||||||||||||
41 | if (digit
| 0 | ||||||||||||||||||||||||||||||||||||
42 | val = c - '0'; never executed: val = c - '0'; | 0 | ||||||||||||||||||||||||||||||||||||
43 | else if (isspace((uchar) c)
| 0 | ||||||||||||||||||||||||||||||||||||
44 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||||||||||||||
45 | else if (c == '#'
| 0 | ||||||||||||||||||||||||||||||||||||
46 | discard_pbm_line(d); never executed: discard_pbm_line(d); | 0 | ||||||||||||||||||||||||||||||||||||
47 | else | - | ||||||||||||||||||||||||||||||||||||
48 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
49 | } | - | ||||||||||||||||||||||||||||||||||||
50 | return never executed: val;return val; never executed: return val; | 0 | ||||||||||||||||||||||||||||||||||||
51 | } | - | ||||||||||||||||||||||||||||||||||||
52 | - | |||||||||||||||||||||||||||||||||||||
53 | static bool read_pbm_header(QIODevice *device, char& type, int& w, int& h, int& mcc) | - | ||||||||||||||||||||||||||||||||||||
54 | { | - | ||||||||||||||||||||||||||||||||||||
55 | char buf[3]; | - | ||||||||||||||||||||||||||||||||||||
56 | if (device->read(buf, 3) != 3
| 0 | ||||||||||||||||||||||||||||||||||||
57 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
58 | - | |||||||||||||||||||||||||||||||||||||
59 | if (!(buf[0] == 'P'
| 0 | ||||||||||||||||||||||||||||||||||||
60 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
61 | - | |||||||||||||||||||||||||||||||||||||
62 | type = buf[1]; | - | ||||||||||||||||||||||||||||||||||||
63 | if (type < '1'
| 0 | ||||||||||||||||||||||||||||||||||||
64 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
65 | - | |||||||||||||||||||||||||||||||||||||
66 | w = read_pbm_int(device); | - | ||||||||||||||||||||||||||||||||||||
67 | h = read_pbm_int(device); | - | ||||||||||||||||||||||||||||||||||||
68 | - | |||||||||||||||||||||||||||||||||||||
69 | if (type == '1'
| 0 | ||||||||||||||||||||||||||||||||||||
70 | mcc = 1; never executed: mcc = 1; | 0 | ||||||||||||||||||||||||||||||||||||
71 | else | - | ||||||||||||||||||||||||||||||||||||
72 | mcc = read_pbm_int(device); never executed: mcc = read_pbm_int(device); | 0 | ||||||||||||||||||||||||||||||||||||
73 | - | |||||||||||||||||||||||||||||||||||||
74 | if (w <= 0
| 0 | ||||||||||||||||||||||||||||||||||||
75 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
76 | - | |||||||||||||||||||||||||||||||||||||
77 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||||||||||||||
78 | } | - | ||||||||||||||||||||||||||||||||||||
79 | - | |||||||||||||||||||||||||||||||||||||
80 | static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, QImage *outImage) | - | ||||||||||||||||||||||||||||||||||||
81 | { | - | ||||||||||||||||||||||||||||||||||||
82 | int nbits, y; | - | ||||||||||||||||||||||||||||||||||||
83 | int pbm_bpl; | - | ||||||||||||||||||||||||||||||||||||
84 | bool raw; | - | ||||||||||||||||||||||||||||||||||||
85 | - | |||||||||||||||||||||||||||||||||||||
86 | QImage::Format format; | - | ||||||||||||||||||||||||||||||||||||
87 | switch (type) { | - | ||||||||||||||||||||||||||||||||||||
88 | case never executed: '1':case '1': never executed: case '1': | 0 | ||||||||||||||||||||||||||||||||||||
89 | case never executed: '4':case '4': never executed: case '4': | 0 | ||||||||||||||||||||||||||||||||||||
90 | nbits = 1; | - | ||||||||||||||||||||||||||||||||||||
91 | format = QImage::Format_Mono; | - | ||||||||||||||||||||||||||||||||||||
92 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
93 | case never executed: '2':case '2': never executed: case '2': | 0 | ||||||||||||||||||||||||||||||||||||
94 | case never executed: '5':case '5': never executed: case '5': | 0 | ||||||||||||||||||||||||||||||||||||
95 | nbits = 8; | - | ||||||||||||||||||||||||||||||||||||
96 | format = QImage::Format_Grayscale8; | - | ||||||||||||||||||||||||||||||||||||
97 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
98 | case never executed: '3':case '3': never executed: case '3': | 0 | ||||||||||||||||||||||||||||||||||||
99 | case never executed: '6':case '6': never executed: case '6': | 0 | ||||||||||||||||||||||||||||||||||||
100 | nbits = 32; | - | ||||||||||||||||||||||||||||||||||||
101 | format = QImage::Format_RGB32; | - | ||||||||||||||||||||||||||||||||||||
102 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
103 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||||||||||||||||||||
104 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
105 | } | - | ||||||||||||||||||||||||||||||||||||
106 | raw = type >= '4'; | - | ||||||||||||||||||||||||||||||||||||
107 | - | |||||||||||||||||||||||||||||||||||||
108 | int maxc = mcc; | - | ||||||||||||||||||||||||||||||||||||
109 | if (maxc > 255
| 0 | ||||||||||||||||||||||||||||||||||||
110 | maxc = 255; never executed: maxc = 255; | 0 | ||||||||||||||||||||||||||||||||||||
111 | if (outImage->size() != QSize(w, h)
| 0 | ||||||||||||||||||||||||||||||||||||
112 | *outImage = QImage(w, h, format); | - | ||||||||||||||||||||||||||||||||||||
113 | if (outImage->isNull()
| 0 | ||||||||||||||||||||||||||||||||||||
114 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
115 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
116 | - | |||||||||||||||||||||||||||||||||||||
117 | pbm_bpl = (nbits*w+7)/8; | - | ||||||||||||||||||||||||||||||||||||
118 | - | |||||||||||||||||||||||||||||||||||||
119 | if (raw
| 0 | ||||||||||||||||||||||||||||||||||||
120 | if (nbits == 32
| 0 | ||||||||||||||||||||||||||||||||||||
121 | pbm_bpl = mcc < 256
| 0 | ||||||||||||||||||||||||||||||||||||
122 | uchar *buf24 = new uchar[pbm_bpl], *b; | - | ||||||||||||||||||||||||||||||||||||
123 | QRgb *p; | - | ||||||||||||||||||||||||||||||||||||
124 | QRgb *end; | - | ||||||||||||||||||||||||||||||||||||
125 | for (y=0; y<h
| 0 | ||||||||||||||||||||||||||||||||||||
126 | if (device->read((char *)buf24, pbm_bpl) != pbm_bpl
| 0 | ||||||||||||||||||||||||||||||||||||
127 | delete[] buf24; | - | ||||||||||||||||||||||||||||||||||||
128 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
129 | } | - | ||||||||||||||||||||||||||||||||||||
130 | p = (QRgb *)outImage->scanLine(y); | - | ||||||||||||||||||||||||||||||||||||
131 | end = p + w; | - | ||||||||||||||||||||||||||||||||||||
132 | b = buf24; | - | ||||||||||||||||||||||||||||||||||||
133 | while (p < end
| 0 | ||||||||||||||||||||||||||||||||||||
134 | if (mcc < 256
| 0 | ||||||||||||||||||||||||||||||||||||
135 | *p++ = qRgb(b[0],b[1],b[2]); | - | ||||||||||||||||||||||||||||||||||||
136 | b += 3; | - | ||||||||||||||||||||||||||||||||||||
137 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||
138 | *p++ = qRgb(((int(b[0]) * 256 + int(b[1]) + 1) * 256) / (mcc + 1) - 1, | - | ||||||||||||||||||||||||||||||||||||
139 | ((int(b[2]) * 256 + int(b[3]) + 1) * 256) / (mcc + 1) - 1, | - | ||||||||||||||||||||||||||||||||||||
140 | ((int(b[4]) * 256 + int(b[5]) + 1) * 256) / (mcc + 1) - 1); | - | ||||||||||||||||||||||||||||||||||||
141 | b += 6; | - | ||||||||||||||||||||||||||||||||||||
142 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
143 | } | - | ||||||||||||||||||||||||||||||||||||
144 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
145 | delete[] buf24; | - | ||||||||||||||||||||||||||||||||||||
146 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||
147 | for (y=0; y<h
| 0 | ||||||||||||||||||||||||||||||||||||
148 | if (device->read((char *)outImage->scanLine(y), pbm_bpl)
| 0 | ||||||||||||||||||||||||||||||||||||
149 | != pbm_bpl
| 0 | ||||||||||||||||||||||||||||||||||||
150 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
151 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
152 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
153 | } else { | - | ||||||||||||||||||||||||||||||||||||
154 | uchar *p; | - | ||||||||||||||||||||||||||||||||||||
155 | int n; | - | ||||||||||||||||||||||||||||||||||||
156 | char buf; | - | ||||||||||||||||||||||||||||||||||||
157 | for (y = 0; (
| 0 | ||||||||||||||||||||||||||||||||||||
158 | p = outImage->scanLine(y); | - | ||||||||||||||||||||||||||||||||||||
159 | n = pbm_bpl; | - | ||||||||||||||||||||||||||||||||||||
160 | if (nbits == 1
| 0 | ||||||||||||||||||||||||||||||||||||
161 | int b; | - | ||||||||||||||||||||||||||||||||||||
162 | int bitsLeft = w; | - | ||||||||||||||||||||||||||||||||||||
163 | while (n--
| 0 | ||||||||||||||||||||||||||||||||||||
164 | b = 0; | - | ||||||||||||||||||||||||||||||||||||
165 | for (int i=0; i<8
| 0 | ||||||||||||||||||||||||||||||||||||
166 | if (i < bitsLeft
| 0 | ||||||||||||||||||||||||||||||||||||
167 | b = (b << 1) | (read_pbm_int(device) & 1); never executed: b = (b << 1) | (read_pbm_int(device) & 1); | 0 | ||||||||||||||||||||||||||||||||||||
168 | else | - | ||||||||||||||||||||||||||||||||||||
169 | b = (b << 1) | (0 & 1); never executed: b = (b << 1) | (0 & 1); | 0 | ||||||||||||||||||||||||||||||||||||
170 | } | - | ||||||||||||||||||||||||||||||||||||
171 | bitsLeft -= 8; | - | ||||||||||||||||||||||||||||||||||||
172 | *p++ = b; | - | ||||||||||||||||||||||||||||||||||||
173 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
174 | } never executed: else if (nbits == 8end of block
| 0 | ||||||||||||||||||||||||||||||||||||
175 | if (mcc == 255
| 0 | ||||||||||||||||||||||||||||||||||||
176 | while (n--
| 0 | ||||||||||||||||||||||||||||||||||||
177 | *p++ = read_pbm_int(device); | - | ||||||||||||||||||||||||||||||||||||
178 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
179 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||
180 | while (n--
| 0 | ||||||||||||||||||||||||||||||||||||
181 | *p++ = read_pbm_int(device) * 255 / mcc; | - | ||||||||||||||||||||||||||||||||||||
182 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
183 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
184 | } else { | - | ||||||||||||||||||||||||||||||||||||
185 | n /= 4; | - | ||||||||||||||||||||||||||||||||||||
186 | int r, g, b; | - | ||||||||||||||||||||||||||||||||||||
187 | if (mcc == maxc
| 0 | ||||||||||||||||||||||||||||||||||||
188 | while (n--
| 0 | ||||||||||||||||||||||||||||||||||||
189 | r = read_pbm_int(device); | - | ||||||||||||||||||||||||||||||||||||
190 | g = read_pbm_int(device); | - | ||||||||||||||||||||||||||||||||||||
191 | b = read_pbm_int(device); | - | ||||||||||||||||||||||||||||||||||||
192 | *((QRgb*)p) = qRgb(r, g, b); | - | ||||||||||||||||||||||||||||||||||||
193 | p += 4; | - | ||||||||||||||||||||||||||||||||||||
194 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
195 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||
196 | while (n--
| 0 | ||||||||||||||||||||||||||||||||||||
197 | r = read_pbm_int(device) * maxc / mcc; | - | ||||||||||||||||||||||||||||||||||||
198 | g = read_pbm_int(device) * maxc / mcc; | - | ||||||||||||||||||||||||||||||||||||
199 | b = read_pbm_int(device) * maxc / mcc; | - | ||||||||||||||||||||||||||||||||||||
200 | *((QRgb*)p) = qRgb(r, g, b); | - | ||||||||||||||||||||||||||||||||||||
201 | p += 4; | - | ||||||||||||||||||||||||||||||||||||
202 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
203 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
204 | } | - | ||||||||||||||||||||||||||||||||||||
205 | } | - | ||||||||||||||||||||||||||||||||||||
206 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
207 | - | |||||||||||||||||||||||||||||||||||||
208 | if (format == QImage::Format_Mono
| 0 | ||||||||||||||||||||||||||||||||||||
209 | outImage->setColorCount(2); | - | ||||||||||||||||||||||||||||||||||||
210 | outImage->setColor(0, qRgb(255,255,255)); | - | ||||||||||||||||||||||||||||||||||||
211 | outImage->setColor(1, qRgb(0,0,0)); | - | ||||||||||||||||||||||||||||||||||||
212 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
213 | - | |||||||||||||||||||||||||||||||||||||
214 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||||||||||||||
215 | } | - | ||||||||||||||||||||||||||||||||||||
216 | - | |||||||||||||||||||||||||||||||||||||
217 | static bool write_pbm_image(QIODevice *out, const QImage &sourceImage, const QByteArray &sourceFormat) | - | ||||||||||||||||||||||||||||||||||||
218 | { | - | ||||||||||||||||||||||||||||||||||||
219 | QByteArray str; | - | ||||||||||||||||||||||||||||||||||||
220 | QImage image = sourceImage; | - | ||||||||||||||||||||||||||||||||||||
221 | QByteArray format = sourceFormat; | - | ||||||||||||||||||||||||||||||||||||
222 | - | |||||||||||||||||||||||||||||||||||||
223 | format = format.left(3); | - | ||||||||||||||||||||||||||||||||||||
224 | bool gray = format == "pgm"; | - | ||||||||||||||||||||||||||||||||||||
225 | - | |||||||||||||||||||||||||||||||||||||
226 | if (format == "pbm"
| 0 | ||||||||||||||||||||||||||||||||||||
227 | image = image.convertToFormat(QImage::Format_Mono); | - | ||||||||||||||||||||||||||||||||||||
228 | } never executed: else if (grayend of block
| 0 | ||||||||||||||||||||||||||||||||||||
229 | image = image.convertToFormat(QImage::Format_Grayscale8); | - | ||||||||||||||||||||||||||||||||||||
230 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||
231 | switch (image.format()) { | - | ||||||||||||||||||||||||||||||||||||
232 | case never executed: QImage::Format_Mono:case QImage::Format_Mono: never executed: case QImage::Format_Mono: | 0 | ||||||||||||||||||||||||||||||||||||
233 | case never executed: QImage::Format_MonoLSB:case QImage::Format_MonoLSB: never executed: case QImage::Format_MonoLSB: | 0 | ||||||||||||||||||||||||||||||||||||
234 | image = image.convertToFormat(QImage::Format_Indexed8); | - | ||||||||||||||||||||||||||||||||||||
235 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
236 | case never executed: QImage::Format_Indexed8:case QImage::Format_Indexed8: never executed: case QImage::Format_Indexed8: | 0 | ||||||||||||||||||||||||||||||||||||
237 | case never executed: QImage::Format_RGB32:case QImage::Format_RGB32: never executed: case QImage::Format_RGB32: | 0 | ||||||||||||||||||||||||||||||||||||
238 | case never executed: QImage::Format_ARGB32:case QImage::Format_ARGB32: never executed: case QImage::Format_ARGB32: | 0 | ||||||||||||||||||||||||||||||||||||
239 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
240 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||||||||||||||||||||
241 | if (image.hasAlphaChannel()
| 0 | ||||||||||||||||||||||||||||||||||||
242 | image = image.convertToFormat(QImage::Format_ARGB32); never executed: image = image.convertToFormat(QImage::Format_ARGB32); | 0 | ||||||||||||||||||||||||||||||||||||
243 | else | - | ||||||||||||||||||||||||||||||||||||
244 | image = image.convertToFormat(QImage::Format_RGB32); never executed: image = image.convertToFormat(QImage::Format_RGB32); | 0 | ||||||||||||||||||||||||||||||||||||
245 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
246 | } | - | ||||||||||||||||||||||||||||||||||||
247 | } | - | ||||||||||||||||||||||||||||||||||||
248 | - | |||||||||||||||||||||||||||||||||||||
249 | if (image.depth() == 1
| 0 | ||||||||||||||||||||||||||||||||||||
250 | if (qGray(image.color(0)) < qGray(image.color(1))
| 0 | ||||||||||||||||||||||||||||||||||||
251 | - | |||||||||||||||||||||||||||||||||||||
252 | image.detach(); | - | ||||||||||||||||||||||||||||||||||||
253 | for (int y=0; y<image.height()
| 0 | ||||||||||||||||||||||||||||||||||||
254 | uchar *p = image.scanLine(y); | - | ||||||||||||||||||||||||||||||||||||
255 | uchar *end = p + image.bytesPerLine(); | - | ||||||||||||||||||||||||||||||||||||
256 | while (p < end
| 0 | ||||||||||||||||||||||||||||||||||||
257 | * never executed: p++ ^= 0xff;*p++ ^= 0xff; never executed: *p++ ^= 0xff; | 0 | ||||||||||||||||||||||||||||||||||||
258 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
259 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
260 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
261 | - | |||||||||||||||||||||||||||||||||||||
262 | uint w = image.width(); | - | ||||||||||||||||||||||||||||||||||||
263 | uint h = image.height(); | - | ||||||||||||||||||||||||||||||||||||
264 | - | |||||||||||||||||||||||||||||||||||||
265 | str = "P\n"; | - | ||||||||||||||||||||||||||||||||||||
266 | str += QByteArray::number(w); | - | ||||||||||||||||||||||||||||||||||||
267 | str += ' '; | - | ||||||||||||||||||||||||||||||||||||
268 | str += QByteArray::number(h); | - | ||||||||||||||||||||||||||||||||||||
269 | str += '\n'; | - | ||||||||||||||||||||||||||||||||||||
270 | - | |||||||||||||||||||||||||||||||||||||
271 | switch (image.depth()) { | - | ||||||||||||||||||||||||||||||||||||
272 | case never executed: 1:case 1: never executed: {case 1: | 0 | ||||||||||||||||||||||||||||||||||||
273 | str.insert(1, '4'); | - | ||||||||||||||||||||||||||||||||||||
274 | if (out->write(str, str.length()) != str.length()
| 0 | ||||||||||||||||||||||||||||||||||||
275 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
276 | w = (w+7)/8; | - | ||||||||||||||||||||||||||||||||||||
277 | for (uint y=0; y<h
| 0 | ||||||||||||||||||||||||||||||||||||
278 | uchar* line = image.scanLine(y); | - | ||||||||||||||||||||||||||||||||||||
279 | if (w != (uint)out->write((char*)line, w)
| 0 | ||||||||||||||||||||||||||||||||||||
280 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
281 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
282 | } | - | ||||||||||||||||||||||||||||||||||||
283 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
284 | - | |||||||||||||||||||||||||||||||||||||
285 | case never executed: 8:case 8: never executed: {case 8: | 0 | ||||||||||||||||||||||||||||||||||||
286 | str.insert(1, gray ? '5' : '6'); | - | ||||||||||||||||||||||||||||||||||||
287 | str.append("255\n"); | - | ||||||||||||||||||||||||||||||||||||
288 | if (out->write(str, str.length()) != str.length()
| 0 | ||||||||||||||||||||||||||||||||||||
289 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
290 | uint bpl = w * (gray ? 1 : 3); | - | ||||||||||||||||||||||||||||||||||||
291 | uchar *buf = new uchar[bpl]; | - | ||||||||||||||||||||||||||||||||||||
292 | if (image.format() == QImage::Format_Indexed8
| 0 | ||||||||||||||||||||||||||||||||||||
293 | QVector<QRgb> color = image.colorTable(); | - | ||||||||||||||||||||||||||||||||||||
294 | for (uint y=0; y<h
| 0 | ||||||||||||||||||||||||||||||||||||
295 | const uchar *b = image.constScanLine(y); | - | ||||||||||||||||||||||||||||||||||||
296 | uchar *p = buf; | - | ||||||||||||||||||||||||||||||||||||
297 | uchar *end = buf+bpl; | - | ||||||||||||||||||||||||||||||||||||
298 | if (gray
| 0 | ||||||||||||||||||||||||||||||||||||
299 | while (p < end
| 0 | ||||||||||||||||||||||||||||||||||||
300 | uchar g = (uchar)qGray(color[*b++]); | - | ||||||||||||||||||||||||||||||||||||
301 | *p++ = g; | - | ||||||||||||||||||||||||||||||||||||
302 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
303 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||
304 | while (p < end
| 0 | ||||||||||||||||||||||||||||||||||||
305 | QRgb rgb = color[*b++]; | - | ||||||||||||||||||||||||||||||||||||
306 | *p++ = qRed(rgb); | - | ||||||||||||||||||||||||||||||||||||
307 | *p++ = qGreen(rgb); | - | ||||||||||||||||||||||||||||||||||||
308 | *p++ = qBlue(rgb); | - | ||||||||||||||||||||||||||||||||||||
309 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
310 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
311 | if (bpl != (uint)out->write((char*)buf, bpl)
| 0 | ||||||||||||||||||||||||||||||||||||
312 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
313 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
314 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||
315 | for (uint y=0; y<h
| 0 | ||||||||||||||||||||||||||||||||||||
316 | const uchar *b = image.constScanLine(y); | - | ||||||||||||||||||||||||||||||||||||
317 | uchar *p = buf; | - | ||||||||||||||||||||||||||||||||||||
318 | uchar *end = buf + bpl; | - | ||||||||||||||||||||||||||||||||||||
319 | if (gray
| 0 | ||||||||||||||||||||||||||||||||||||
320 | while (p < end
| 0 | ||||||||||||||||||||||||||||||||||||
321 | * never executed: p++ = *b++;*p++ = *b++; never executed: *p++ = *b++; | 0 | ||||||||||||||||||||||||||||||||||||
322 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||
323 | while (p < end
| 0 | ||||||||||||||||||||||||||||||||||||
324 | uchar color = *b++; | - | ||||||||||||||||||||||||||||||||||||
325 | *p++ = color; | - | ||||||||||||||||||||||||||||||||||||
326 | *p++ = color; | - | ||||||||||||||||||||||||||||||||||||
327 | *p++ = color; | - | ||||||||||||||||||||||||||||||||||||
328 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
329 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
330 | if (bpl != (uint)out->write((char*)buf, bpl)
| 0 | ||||||||||||||||||||||||||||||||||||
331 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
332 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
333 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
334 | delete [] buf; | - | ||||||||||||||||||||||||||||||||||||
335 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
336 | } | - | ||||||||||||||||||||||||||||||||||||
337 | - | |||||||||||||||||||||||||||||||||||||
338 | case never executed: 32:case 32: never executed: {case 32: | 0 | ||||||||||||||||||||||||||||||||||||
339 | str.insert(1, '6'); | - | ||||||||||||||||||||||||||||||||||||
340 | str.append("255\n"); | - | ||||||||||||||||||||||||||||||||||||
341 | if (out->write(str, str.length()) != str.length()
| 0 | ||||||||||||||||||||||||||||||||||||
342 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
343 | uint bpl = w * 3; | - | ||||||||||||||||||||||||||||||||||||
344 | uchar *buf = new uchar[bpl]; | - | ||||||||||||||||||||||||||||||||||||
345 | for (uint y=0; y<h
| 0 | ||||||||||||||||||||||||||||||||||||
346 | const QRgb *b = reinterpret_cast<const QRgb *>(image.constScanLine(y)); | - | ||||||||||||||||||||||||||||||||||||
347 | uchar *p = buf; | - | ||||||||||||||||||||||||||||||||||||
348 | uchar *end = buf+bpl; | - | ||||||||||||||||||||||||||||||||||||
349 | while (p < end
| 0 | ||||||||||||||||||||||||||||||||||||
350 | QRgb rgb = *b++; | - | ||||||||||||||||||||||||||||||||||||
351 | *p++ = qRed(rgb); | - | ||||||||||||||||||||||||||||||||||||
352 | *p++ = qGreen(rgb); | - | ||||||||||||||||||||||||||||||||||||
353 | *p++ = qBlue(rgb); | - | ||||||||||||||||||||||||||||||||||||
354 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
355 | if (bpl != (uint)out->write((char*)buf, bpl)
| 0 | ||||||||||||||||||||||||||||||||||||
356 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
357 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
358 | delete [] buf; | - | ||||||||||||||||||||||||||||||||||||
359 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
360 | } | - | ||||||||||||||||||||||||||||||||||||
361 | - | |||||||||||||||||||||||||||||||||||||
362 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||||||||||||||||||||
363 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
364 | } | - | ||||||||||||||||||||||||||||||||||||
365 | - | |||||||||||||||||||||||||||||||||||||
366 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||||||||||||||
367 | } | - | ||||||||||||||||||||||||||||||||||||
368 | - | |||||||||||||||||||||||||||||||||||||
369 | QPpmHandler::QPpmHandler() | - | ||||||||||||||||||||||||||||||||||||
370 | : state(Ready) | - | ||||||||||||||||||||||||||||||||||||
371 | { | - | ||||||||||||||||||||||||||||||||||||
372 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
373 | - | |||||||||||||||||||||||||||||||||||||
374 | bool QPpmHandler::readHeader() | - | ||||||||||||||||||||||||||||||||||||
375 | { | - | ||||||||||||||||||||||||||||||||||||
376 | state = Error; | - | ||||||||||||||||||||||||||||||||||||
377 | if (!read_pbm_header(device(), type, width, height, mcc)
| 0 | ||||||||||||||||||||||||||||||||||||
378 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
379 | state = ReadHeader; | - | ||||||||||||||||||||||||||||||||||||
380 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||||||||||||||
381 | } | - | ||||||||||||||||||||||||||||||||||||
382 | - | |||||||||||||||||||||||||||||||||||||
383 | bool QPpmHandler::canRead() const | - | ||||||||||||||||||||||||||||||||||||
384 | { | - | ||||||||||||||||||||||||||||||||||||
385 | if (state == Ready
| 0 | ||||||||||||||||||||||||||||||||||||
386 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
387 | - | |||||||||||||||||||||||||||||||||||||
388 | if (state != Error
| 0 | ||||||||||||||||||||||||||||||||||||
389 | setFormat(subType); | - | ||||||||||||||||||||||||||||||||||||
390 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||||||||||||||
391 | } | - | ||||||||||||||||||||||||||||||||||||
392 | - | |||||||||||||||||||||||||||||||||||||
393 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
394 | } | - | ||||||||||||||||||||||||||||||||||||
395 | - | |||||||||||||||||||||||||||||||||||||
396 | bool QPpmHandler::canRead(QIODevice *device, QByteArray *subType) | - | ||||||||||||||||||||||||||||||||||||
397 | { | - | ||||||||||||||||||||||||||||||||||||
398 | if (!device
| 0 | ||||||||||||||||||||||||||||||||||||
399 | QMessageLogger(__FILE__, 436, __PRETTY_FUNCTION__).warning("QPpmHandler::canRead() called with no device"); | - | ||||||||||||||||||||||||||||||||||||
400 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
401 | } | - | ||||||||||||||||||||||||||||||||||||
402 | - | |||||||||||||||||||||||||||||||||||||
403 | char head[2]; | - | ||||||||||||||||||||||||||||||||||||
404 | if (device->peek(head, sizeof(head)) != sizeof(head)
| 0 | ||||||||||||||||||||||||||||||||||||
405 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
406 | - | |||||||||||||||||||||||||||||||||||||
407 | if (head[0] != 'P'
| 0 | ||||||||||||||||||||||||||||||||||||
408 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
409 | - | |||||||||||||||||||||||||||||||||||||
410 | if (head[1] == '1'
| 0 | ||||||||||||||||||||||||||||||||||||
411 | if (subType
| 0 | ||||||||||||||||||||||||||||||||||||
412 | * never executed: subType = "pbm";*subType = "pbm"; never executed: *subType = "pbm"; | 0 | ||||||||||||||||||||||||||||||||||||
413 | } never executed: else if (head[1] == '2'end of block
| 0 | ||||||||||||||||||||||||||||||||||||
414 | if (subType
| 0 | ||||||||||||||||||||||||||||||||||||
415 | * never executed: subType = "pgm";*subType = "pgm"; never executed: *subType = "pgm"; | 0 | ||||||||||||||||||||||||||||||||||||
416 | } never executed: else if (head[1] == '3'end of block
| 0 | ||||||||||||||||||||||||||||||||||||
417 | if (subType
| 0 | ||||||||||||||||||||||||||||||||||||
418 | * never executed: subType = "ppm";*subType = "ppm"; never executed: *subType = "ppm"; | 0 | ||||||||||||||||||||||||||||||||||||
419 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||
420 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
421 | } | - | ||||||||||||||||||||||||||||||||||||
422 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||||||||||||||
423 | } | - | ||||||||||||||||||||||||||||||||||||
424 | - | |||||||||||||||||||||||||||||||||||||
425 | bool QPpmHandler::read(QImage *image) | - | ||||||||||||||||||||||||||||||||||||
426 | { | - | ||||||||||||||||||||||||||||||||||||
427 | if (state == Error
| 0 | ||||||||||||||||||||||||||||||||||||
428 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
429 | - | |||||||||||||||||||||||||||||||||||||
430 | if (state == Ready
| 0 | ||||||||||||||||||||||||||||||||||||
431 | state = Error; | - | ||||||||||||||||||||||||||||||||||||
432 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
433 | } | - | ||||||||||||||||||||||||||||||||||||
434 | - | |||||||||||||||||||||||||||||||||||||
435 | if (!read_pbm_body(device(), type, width, height, mcc, image)
| 0 | ||||||||||||||||||||||||||||||||||||
436 | state = Error; | - | ||||||||||||||||||||||||||||||||||||
437 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||||||||||||||
438 | } | - | ||||||||||||||||||||||||||||||||||||
439 | - | |||||||||||||||||||||||||||||||||||||
440 | state = Ready; | - | ||||||||||||||||||||||||||||||||||||
441 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||||||||||||||
442 | } | - | ||||||||||||||||||||||||||||||||||||
443 | - | |||||||||||||||||||||||||||||||||||||
444 | bool QPpmHandler::write(const QImage &image) | - | ||||||||||||||||||||||||||||||||||||
445 | { | - | ||||||||||||||||||||||||||||||||||||
446 | return never executed: write_pbm_image(device(), image, subType);return write_pbm_image(device(), image, subType); never executed: return write_pbm_image(device(), image, subType); | 0 | ||||||||||||||||||||||||||||||||||||
447 | } | - | ||||||||||||||||||||||||||||||||||||
448 | - | |||||||||||||||||||||||||||||||||||||
449 | bool QPpmHandler::supportsOption(ImageOption option) const | - | ||||||||||||||||||||||||||||||||||||
450 | { | - | ||||||||||||||||||||||||||||||||||||
451 | return never executed: option == SubTypereturn option == SubType || option == Size || option == ImageFormat;
never executed: return option == SubType || option == Size || option == ImageFormat; | 0 | ||||||||||||||||||||||||||||||||||||
452 | || option == Size
never executed: return option == SubType || option == Size || option == ImageFormat; | 0 | ||||||||||||||||||||||||||||||||||||
453 | || option == ImageFormat
never executed: return option == SubType || option == Size || option == ImageFormat; | 0 | ||||||||||||||||||||||||||||||||||||
454 | } | - | ||||||||||||||||||||||||||||||||||||
455 | - | |||||||||||||||||||||||||||||||||||||
456 | QVariant QPpmHandler::option(ImageOption option) const | - | ||||||||||||||||||||||||||||||||||||
457 | { | - | ||||||||||||||||||||||||||||||||||||
458 | if (option == SubType
| 0 | ||||||||||||||||||||||||||||||||||||
459 | return never executed: subType;return subType; never executed: return subType; | 0 | ||||||||||||||||||||||||||||||||||||
460 | } else if (option == Size
| 0 | ||||||||||||||||||||||||||||||||||||
461 | if (state == Error
| 0 | ||||||||||||||||||||||||||||||||||||
462 | return never executed: QVariant();return QVariant(); never executed: return QVariant(); | 0 | ||||||||||||||||||||||||||||||||||||
463 | if (state == Ready
| 0 | ||||||||||||||||||||||||||||||||||||
464 | return never executed: QVariant();return QVariant(); never executed: return QVariant(); | 0 | ||||||||||||||||||||||||||||||||||||
465 | return never executed: QSize(width, height);return QSize(width, height); never executed: return QSize(width, height); | 0 | ||||||||||||||||||||||||||||||||||||
466 | } else if (option == ImageFormat
| 0 | ||||||||||||||||||||||||||||||||||||
467 | if (state == Error
| 0 | ||||||||||||||||||||||||||||||||||||
468 | return never executed: QVariant();return QVariant(); never executed: return QVariant(); | 0 | ||||||||||||||||||||||||||||||||||||
469 | if (state == Ready
| 0 | ||||||||||||||||||||||||||||||||||||
470 | return never executed: QVariant();return QVariant(); never executed: return QVariant(); | 0 | ||||||||||||||||||||||||||||||||||||
471 | QImage::Format format = QImage::Format_Invalid; | - | ||||||||||||||||||||||||||||||||||||
472 | switch (type) { | - | ||||||||||||||||||||||||||||||||||||
473 | case never executed: '1':case '1': never executed: case '1': | 0 | ||||||||||||||||||||||||||||||||||||
474 | case never executed: '4':case '4': never executed: case '4': | 0 | ||||||||||||||||||||||||||||||||||||
475 | format = QImage::Format_Mono; | - | ||||||||||||||||||||||||||||||||||||
476 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
477 | case never executed: '2':case '2': never executed: case '2': | 0 | ||||||||||||||||||||||||||||||||||||
478 | case never executed: '5':case '5': never executed: case '5': | 0 | ||||||||||||||||||||||||||||||||||||
479 | format = QImage::Format_Grayscale8; | - | ||||||||||||||||||||||||||||||||||||
480 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
481 | case never executed: '3':case '3': never executed: case '3': | 0 | ||||||||||||||||||||||||||||||||||||
482 | case never executed: '6':case '6': never executed: case '6': | 0 | ||||||||||||||||||||||||||||||||||||
483 | format = QImage::Format_RGB32; | - | ||||||||||||||||||||||||||||||||||||
484 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
485 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||||||||||||||||||||
486 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
487 | } | - | ||||||||||||||||||||||||||||||||||||
488 | return never executed: format;return format; never executed: return format; | 0 | ||||||||||||||||||||||||||||||||||||
489 | } | - | ||||||||||||||||||||||||||||||||||||
490 | return never executed: QVariant();return QVariant(); never executed: return QVariant(); | 0 | ||||||||||||||||||||||||||||||||||||
491 | } | - | ||||||||||||||||||||||||||||||||||||
492 | - | |||||||||||||||||||||||||||||||||||||
493 | void QPpmHandler::setOption(ImageOption option, const QVariant &value) | - | ||||||||||||||||||||||||||||||||||||
494 | { | - | ||||||||||||||||||||||||||||||||||||
495 | if (option == SubType
| 0 | ||||||||||||||||||||||||||||||||||||
496 | subType = value.toByteArray().toLower(); never executed: subType = value.toByteArray().toLower(); | 0 | ||||||||||||||||||||||||||||||||||||
497 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
498 | - | |||||||||||||||||||||||||||||||||||||
499 | QByteArray QPpmHandler::name() const | - | ||||||||||||||||||||||||||||||||||||
500 | { | - | ||||||||||||||||||||||||||||||||||||
501 | return never executed: subType.isEmpty()return subType.isEmpty() ? QByteArray("ppm") : subType;
never executed: return subType.isEmpty() ? QByteArray("ppm") : subType; | 0 | ||||||||||||||||||||||||||||||||||||
502 | } | - | ||||||||||||||||||||||||||||||||||||
503 | - | |||||||||||||||||||||||||||||||||||||
504 | - | |||||||||||||||||||||||||||||||||||||
Switch to Source code | Preprocessed file |