# HG changeset patch # User David Bateman # Date 1278613517 -7200 # Node ID 6035bf68a7556f97e969182b8b4099f301cd58e8 # Parent f2a8f68d9c2b6d768fa88653f5e3867647fc77b8 Support imread('file', 'frames', 'all') (Feature Request #30365) diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-07-08 David Bateman + + * DLD-FUNCTIONS/__magick_read__,cc (F__magick_read__): Add the syntax + __magick_read__ ("file", "frames", "all"). + 2010-07-08 Rik * DLD_FUNCTIONS/eigs.cc: Initialize random number generator in test diff --git a/src/DLD-FUNCTIONS/__magick_read__.cc b/src/DLD-FUNCTIONS/__magick_read__.cc --- 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 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 (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 (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; + } } }