Mercurial > hg > octave-max
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: |