Mercurial > hg > octave-thorsten
diff src/DLD-FUNCTIONS/__magick_read__.cc @ 10778:6035bf68a755
Support imread('file', 'frames', 'all') (Feature Request #30365)
author | David Bateman <dbateman@free.fr> |
---|---|
date | Thu, 08 Jul 2010 20:25:17 +0200 |
parents | d27bd2f74137 |
children | 89f4d7e294cc |
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/__magick_read__.cc +++ b/src/DLD-FUNCTIONS/__magick_read__.cc @@ -403,7 +403,7 @@ initialized = true; } - if (args.length () > 2 || args.length () < 1 || ! args(0).is_string () + if (args.length () > 3 || args.length () < 1 || ! args(0).is_string () || nargout > 3) { print_usage (); @@ -411,9 +411,19 @@ } Array<int> frameidx; + bool all_frames = false; if (args.length () == 2 && args(1).is_real_type ()) frameidx = args(1).int_vector_value(); + else if (args.length () == 3 && args(1).is_string () + && args(1).string_value() == "frames") + { + if (args(2).is_string () + && args(2).string_value() == "all") + all_frames = true; + else if (args(2).is_real_type ()) + frameidx = args(2).int_vector_value(); + } else { frameidx = Array<int> (1, 1); @@ -441,16 +451,24 @@ return output; } - for (int i = 0; i < frameidx.length(); i++) + int nframes = imvec.size (); + if (all_frames) { - frameidx(i) = frameidx(i) - 1; + frameidx = Array<int> (1, nframes); + for (int i = 0; i < frameidx.length(); i++) + frameidx(i) = i; + } + else + { + for (int i = 0; i < frameidx.length(); i++) + { + frameidx(i) = frameidx(i) - 1; - int nframes = imvec.size (); - - if (frameidx(i) >= nframes || frameidx(i) < 0) - { - error ("__magick_read__: invalid index vector"); - return output; + if (frameidx(i) >= nframes || frameidx(i) < 0) + { + error ("__magick_read__: invalid index vector"); + return output; + } } }