Sample
int i, j, current = 0;
fmt_info finfo;
RGBA *image = NULL, *scan;
fmt_codec_base *codeK;
QString file = "/home/krasu/animation1.gif";
Determine the library and codec
codeK = SQ_LibraryHandler::instance()->libraryForFile(file)->codec;
Init: open file, etc.
codeK->read_init(file.ascii());
while(true)
{
i = codeK->read_next();
Break, if we've decoded all available images in file
if(i == SQE_NOTOK)
break;
Obtain the latest information (current image dimensions, etc.)
finfo = codeK->information();
realloc memory for new image
image = (RGBA *)realloc(image, finfo.image[current].w * finfo.image[current].h * sizeof(RGBA));
fill with white color (RGBA(255,255,255,255))
memset(image, 255, finfo.image[current].w * finfo.image[current].h * sizeof(RGBA));
for(int pass = 0;pass < finfo.image[current].passes;pass++)
{
codeK->read_next_pass();
for(j = 0;j < finfo.image[current].h;j++)
{
scan = image + j * finfo.image[current].w;
codeK->read_scanline(scan);
}
}
Do something with decoded image here.
...
current++;
}
codeK->read_close();
free(image);
|