X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fswfrender.c;h=87a8b32ad5752b9e1b5b746200598af1f3dbb4ba;hb=661e19e521cd9544e83c50df23f29c645d5d26fe;hp=e31e47866d74aed13eb59dfcec255e85a5206fa0;hpb=938abe20c4264ebf6aac6a02900bbb32582c8e1e;p=swftools.git diff --git a/src/swfrender.c b/src/swfrender.c index e31e478..87a8b32 100644 --- a/src/swfrender.c +++ b/src/swfrender.c @@ -15,6 +15,7 @@ static struct options_t options[] = { {"h", "help"}, {"o", "output"}, +{"p", "pages"}, {"l", "legacy"}, {"V", "version"}, {"X", "width"}, @@ -26,6 +27,7 @@ static int ng = 1; static char*filename = 0; static char*outputname = "output.png"; static int quantize = 0; +static char*pagerange = 0; static int width = 0; static int height = 0; @@ -52,6 +54,9 @@ int args_callback_option(char*name,char*val) } else if(!strcmp(name, "q")) { quantize = 1; return 0; + } else if(!strcmp(name, "p")) { + pagerange = val; + return 1; } else if(!strcmp(name, "s")) { char*s = strdup(val); char*c = strchr(s, '='); @@ -123,33 +128,34 @@ int main(int argn, char*argv[]) fi = open(filename, O_RDONLY|O_BINARY); if (fi<=0) { fprintf(stderr,"Couldn't open %s\n", filename); - perror(argv[1]); + perror(filename); exit(1); } if(swf_ReadSWF(fi,&swf)<0) { fprintf(stderr,"%s is not a valid SWF file or contains errors.\n",argv[1]); close(fi); } + assert(swf.movieSize.xmax > swf.movieSize.xmin && swf.movieSize.ymax > swf.movieSize.ymin); RENDERBUF buf; swf_Render_Init(&buf, 0,0, (swf.movieSize.xmax - swf.movieSize.xmin) / 20, (swf.movieSize.ymax - swf.movieSize.ymin) / 20, 2, 1); swf_RenderSWF(&buf, &swf); RGBA* img = swf_Render(&buf); if(quantize) - writePalettePNG(outputname, (unsigned char*)img, buf.width, buf.height); + png_write_palette_based_2(outputname, (unsigned char*)img, buf.width, buf.height); else - writePNG(outputname, (unsigned char*)img, buf.width, buf.height); + png_write(outputname, (unsigned char*)img, buf.width, buf.height); swf_Render_Delete(&buf); } else { parameter_t*p; gfxsource_t*src = gfxsource_swf_create(); for(p=params;p;p=p->next) { - src->set_parameter(src, p->name, p->value); + src->setparameter(src, p->name, p->value); } gfxdocument_t*doc = src->open(src, filename); for(p=params;p;p=p->next) { - doc->set_parameter(doc, p->name, p->value); + doc->setparameter(doc, p->name, p->value); } if(!doc) { fprintf(stderr,"Couldn't open %s\n", filename); @@ -170,6 +176,8 @@ int main(int argn, char*argv[]) int t; for(t=1;t<=doc->num_pages;t++) { + if(!is_in_range(t, pagerange)) + continue; gfxpage_t* page = doc->getpage(doc, t); dev->startpage(dev, page->width, page->height); page->render(page, dev);