comparison src/DLD-FUNCTIONS/__magick_read__.cc @ 10193:1a4074e277fe

undo unintended change to __magick_read__.cc
author John W. Eaton <jwe@octave.org>
date Fri, 22 Jan 2010 16:54:59 -0500
parents a552859b009a
children 13d382fc758b
comparison
equal deleted inserted replaced
10192:fc95c80058d8 10193:1a4074e277fe
33 33
34 #ifdef HAVE_MAGICK 34 #ifdef HAVE_MAGICK
35 35
36 #include <Magick++.h> 36 #include <Magick++.h>
37 37
38 template <class P, unsigned int depth, unsigned int quantumdepth> 38 unsigned int
39 inline P
40 scale_quantum_to_depth (const Magick::Quantum& quantum)
41 {
42 return (static_cast<P> (static_cast<double> (quantum)
43 / MaxRGB * ((1 << depth) - 1)));
44 }
45
46 template <>
47 inline octave_uint8
48 scale_quantum_to_depth<octave_uint8, 8, 8> (const Magick::Quantum& quantum)
49 {
50 return static_cast<octave_uint8> (quantum);
51 }
52
53 template <>
54 inline octave_uint16
55 scale_quantum_to_depth<octave_uint16, 16, 16> (const Magick::Quantum& quantum)
56 {
57 return static_cast<octave_uint16> (quantum);
58 }
59
60 inline unsigned int
61 scale_quantum_to_depth (const Magick::Quantum& quantum, unsigned int depth) 39 scale_quantum_to_depth (const Magick::Quantum& quantum, unsigned int depth)
62 { 40 {
63 return (static_cast<unsigned int> (static_cast<double> (quantum) 41 return (static_cast<unsigned int> (static_cast<double> (quantum)
64 / MaxRGB * ((1 << depth) - 1))); 42 / MaxRGB * ((1 << depth) - 1)));
65 } 43 }
210 output(1) = map; 188 output(1) = map;
211 189
212 return output; 190 return output;
213 } 191 }
214 192
215 template <class T, class P, unsigned int D> 193 template <class T>
216 octave_value_list 194 octave_value_list
217 read_images (const std::vector<Magick::Image>& imvec, 195 read_images (const std::vector<Magick::Image>& imvec,
218 const Array<int>& frameidx, unsigned int depth) 196 const Array<int>& frameidx, unsigned int depth)
219 { 197 {
220 octave_value_list retval (3, Matrix ()); 198 octave_value_list retval (3, Matrix ());
289 } 267 }
290 break; 268 break;
291 269
292 case Magick::PaletteType: 270 case Magick::PaletteType:
293 case Magick::TrueColorType: 271 case Magick::TrueColorType:
294 { 272 idim(2) = 3;
295 idim(2) = 3; 273 im = T (idim);
296 im = T (idim); 274 for (int frame = 0; frame < nframes; frame++)
297 P *vec = reinterpret_cast<P *> (im.fortran_vec ()); 275 {
298 276 const Magick::PixelPacket *pix
299 for (int frame = 0; frame < nframes; frame++) 277 = imvec[frameidx(frame)].getConstPixels (0, 0, columns, rows);
300 { 278
301 const Magick::PixelPacket *pix 279 int i = 0;
302 = imvec[frameidx(frame)].getConstPixels (0, 0, columns, rows); 280 idx(3) = frame;
303 281
304 int i = 0; 282 for (int y = 0; y < rows; y++)
305 P *rbuf, *gbuf, *bbuf; 283 {
306 rbuf = vec; 284 idx(0) = y;
307 gbuf = vec + rows * columns; 285 for (int x = 0; x < columns; x++)
308 bbuf = vec + rows * columns * 2; 286 {
309 for (int y = 0; y < rows; y++) 287 idx(1) = x;
310 { 288 idx(2) = 0;
311 for (int x = 0; x < columns; x++) 289 im(idx) = scale_quantum_to_depth (pix[i].red, depth);
312 { 290 idx(2) = 1;
313 *rbuf = scale_quantum_to_depth<P, D, QuantumDepth> (pix[i].red); 291 im(idx) = scale_quantum_to_depth (pix[i].green, depth);
314 *gbuf = scale_quantum_to_depth<P, D, QuantumDepth> (pix[i].green); 292 idx(2) = 2;
315 *bbuf = scale_quantum_to_depth<P, D, QuantumDepth> (pix[i].blue); 293 im(idx) = scale_quantum_to_depth (pix[i].blue, depth);
316 i++; 294 i++;
317 rbuf += rows; 295 }
318 gbuf += rows; 296 }
319 bbuf += rows;
320 }
321 rbuf -= rows * columns - 1;
322 gbuf -= rows * columns - 1;
323 bbuf -= rows * columns - 1;
324 }
325
326 // Next frame.
327 vec += rows * columns * 3;
328 }
329 } 297 }
330 break; 298 break;
331 299
332 case Magick::PaletteMatteType: 300 case Magick::PaletteMatteType:
333 case Magick::TrueColorMatteType: 301 case Magick::TrueColorMatteType:
456 } 424 }
457 425
458 switch (depth) 426 switch (depth)
459 { 427 {
460 case 1: 428 case 1:
461 output = read_images<boolNDArray, bool, 1> (imvec, frameidx, depth); 429 output = read_images<boolNDArray> (imvec, frameidx, depth);
462 break; 430 break;
463 431
464 case 2: 432 case 2:
465 output = read_images<uint8NDArray, octave_uint8, 2> (imvec, frameidx, depth) ; 433 case 4:
434 case 8:
435 output = read_images<uint8NDArray> (imvec, frameidx, depth) ;
466 break; 436 break;
467 437
468 case 4:
469 output = read_images<uint8NDArray, octave_uint8, 4> (imvec, frameidx, depth) ;
470 break;
471
472 case 8:
473 output = read_images<uint8NDArray, octave_uint8, 8> (imvec, frameidx, depth) ;
474 break;
475
476 case 16: 438 case 16:
477 output = read_images<uint16NDArray, octave_uint16, 16> (imvec, frameidx, depth); 439 output = read_images<uint16NDArray> (imvec, frameidx, depth);
478 break; 440 break;
479 441
480 case 32: 442 case 32:
481 case 64: 443 case 64:
482 default: 444 default: