Vom: Sat, 10 Sep 2011 08:13:25 -0700
> > Is there a way to read every image one after another
>
> Use an iterator. Here's a code snippet:
Thanks for your answer.
I tried that and it works flawlessly with multi-frame formats (I tested
it with a GIF animation) but it fails with multiple PNGs in the same
stream.
My code looks like this:
c->mw is the MagickWand and
c->file is the opened FILE stream.
/** read image and write RAW frame into buf */
bool im_read_frame(size_t width, size_t height, char *buf)
{
/* is there an image from a previous read? */
if(MagickHasNextImage(c->mw))
{
MagickNextImage(c->mw);
}
else
{
/* end-of-stream reached? */
if(feof(c->file))
return FALSE;
/* read file */
if(!MagickReadImageFile(c->mw, c->file))
{
im_error(c->mw);
return FALSE;
}
/* reset iterator in case we read more than one file */
MagickResetIterator(c->mw);
}
/* get raw-buffer from imagemagick */
if(!(MagickExportImagePixels(c->mw,
0, 0, width, height, c->map, c->storage, buf)))
{
im_error(c->mw);
return FALSE;
}
/* free resources */
if(!MagickHasNextImage(c->mw))
ClearMagickWand(c->mw);
return TRUE;
}
if c->file is something like fopen("test_stream", "r");
and "test_stream" is something like
"cat 1.png 2.png 3.png > test_stream"
I only get 1.png and can't read the following images. I wonder if it's
even possible to do that with MagickWand & MagickReadImageFile() or if
it's just supposed to work with multi-image containers (like GIF
animations)
Of course it works if I open/read 1.png, 2.png and 3.png seperatly, but
there are cases where they could be packed inside one stream. I'd love
to support that case if it's possible somehow.
thanks & best regards
--
rigid
momentum, n.:
What you give a person when they are going away.
_______________________________________________
Magick-users mailing list
[email protected]
http://studio.imagemagick.org/mailman/listinfo/magick-users