53 int *red, *green, *blue, *alpha =
nullptr;
56 unsigned int compno, ncomp;
57 int adjustR, adjustG, adjustB, adjustA;
58 int two, has_alpha, triple;
60 char bufferLocal[1024];
61 QDataStream str (&buffer);
63 if((prec = qFloor (image->comps[0].prec)) > 16)
65 fprintf(stderr,
"%s:%d:imagetopnm\n\tprecision %d is larger than 16"
66 "\n\t: refused.\n",__FILE__,__LINE__,prec);
70 ncomp = image->numcomps;
74 && image->comps[0].dx == image->comps[1].dx
75 && image->comps[1].dx == image->comps[2].dx
76 && image->comps[0].dy == image->comps[1].dy
77 && image->comps[1].dy == image->comps[2].dy
78 && image->comps[0].prec == image->comps[1].prec
79 && image->comps[1].prec == image->comps[2].prec
84 wr = qFloor (image->comps[0].w);
85 hr = qFloor (image->comps[0].h);
86 max = (1<<prec) - 1; has_alpha = (ncomp == 4 || ncomp == 2);
88 red = image->comps[0].data;
92 green = image->comps[1].data;
93 blue = image->comps[2].data;
95 else green = blue =
nullptr;
99 const char *tt = (triple?
"RGB_ALPHA":
"GRAYSCALE_ALPHA");
102 "P7\n# OpenJPEG-%s\nWIDTH %d\nHEIGHT %d\nDEPTH %d\n"
103 "MAXVAL %d\nTUPLTYPE %s\nENDHDR\n",
110 str.writeRawData (bufferLocal,
111 strlen (bufferLocal));
112 alpha = image->comps[ncomp - 1].data;
113 adjustA = (image->comps[ncomp - 1].sgnd ?
114 1 << (image->comps[ncomp - 1].prec - 1) : 0);
119 "P6\n# OpenJPEG-%s\n%d %d\n%d\n",
124 str.writeRawData (bufferLocal,
125 strlen (bufferLocal));
128 adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
132 adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
133 adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
135 else adjustG = adjustB = 0;
137 for(i = 0; i < wr * hr; ++i)
141 v = *red + adjustR; ++red;
142 if(v > 65535) v = 65535;
else if(v < 0) v = 0;
146 static_cast<unsigned char> (v>>8),
147 static_cast<unsigned char> (v));
148 str.writeRawData (bufferLocal,
153 v = *green + adjustG; ++green;
154 if(v > 65535) v = 65535;
else if(v < 0) v = 0;
158 static_cast<unsigned char> (v>>8),
159 static_cast<unsigned char> (v));
160 str.writeRawData (bufferLocal,
163 v = *blue + adjustB; ++blue;
164 if(v > 65535) v = 65535;
else if(v < 0) v = 0;
168 static_cast<unsigned char> (v>>8),
169 static_cast<unsigned char> (v));
170 str.writeRawData (bufferLocal,
177 v = *alpha + adjustA; ++alpha;
178 if(v > 65535) v = 65535;
else if(v < 0) v = 0;
182 static_cast<unsigned char> (v>>8),
183 static_cast<unsigned char> (v));
184 str.writeRawData (bufferLocal,
193 if(v > 255) v = 255;
else if(v < 0) v = 0;
197 static_cast<unsigned char> (v));
198 str.writeRawData (bufferLocal,
203 if(v > 255) v = 255;
else if(v < 0) v = 0;
207 static_cast<unsigned char> (v));
208 str.writeRawData (bufferLocal,
211 if(v > 255) v = 255;
else if(v < 0) v = 0;
215 static_cast<unsigned char> (v));
216 str.writeRawData (bufferLocal,
222 if(v > 255) v = 255;
else if(v < 0) v = 0;
226 static_cast<unsigned char> (v));
227 str.writeRawData (bufferLocal,
237 if (image->numcomps > ncomp)
242 for (compno = 0; compno < ncomp; compno++)
244 wr = qFloor (image->comps[compno].w);
245 hr = qFloor (image->comps[compno].h);
246 prec = qFloor (image->comps[compno].prec);
250 "P5\n#OpenJPEG-%s\n%d %d\n%d\n",
255 str.writeRawData (bufferLocal,
256 strlen (bufferLocal));
258 red = image->comps[compno].data;
260 (image->comps[compno].sgnd ? 1 << (image->comps[compno].prec - 1) : 0);
264 for (i = 0; i < wr * hr; i++)
266 v = *red + adjustR; ++red;
267 if(v > 65535) v = 65535;
else if(v < 0) v = 0;
271 static_cast<unsigned char> (v>>8),
272 static_cast<unsigned char> (v));
273 str.writeRawData (bufferLocal,
279 if(v > 65535) v = 65535;
else if(v < 0) v = 0;
283 static_cast<unsigned char> (v>>8),
284 static_cast<unsigned char> (v));
285 str.writeRawData (bufferLocal,
292 for(i = 0; i < wr * hr; ++i)
294 v = *red + adjustR; ++red;
295 if(v > 255) v = 255;
else if(v < 0) v = 0;
299 static_cast<unsigned char> (v));
300 str.writeRawData (bufferLocal,