+ int sizex = img->width;
+ int sizey = img->height;
+ int num_colors = swf_ImageGetNumberOfPaletteEntries(mem,sizex,sizey,0);
+ int has_alpha = swf_ImageHasAlpha(mem,sizex,sizey);
+ int is_jpeg = i->jpeg;
+ i->jpeg = 0;
+
+ int newsizex=sizex, newsizey=sizey;
+
+ /// {
+ if(is_jpeg && config_jpegsubpixels) {
+ newsizex = (int)(targetwidth*config_jpegsubpixels+0.5);
+ newsizey = (int)(targetheight*config_jpegsubpixels+0.5);
+ } else if(!is_jpeg && config_ppmsubpixels) {
+ newsizex = (int)(targetwidth*config_ppmsubpixels+0.5);
+ newsizey = (int)(targetheight*config_ppmsubpixels+0.5);
+ }
+ /// }
+
+ *newwidth = newsizex;
+ *newheight = newsizey;
+
+
+ /* TODO: cache images */
+
+ msg("<verbose> Drawing %dx%d %s%simage at size %dx%d (%dx%d), %s%d colors",
+ sizex, sizey,
+ has_alpha?(has_alpha==2?"semi-transparent ":"transparent "):"",
+ is_jpeg?"jpeg-":"",
+ newsizex, newsizey,
+ targetwidth, targetheight,
+ /*newsizex, newsizey,*/
+ num_colors>256?">":"", num_colors>256?256:num_colors);
+
+ if(newsizex!=sizex || newsizey!=sizey) {
+ newpic = swf_ImageScale(mem, sizex, sizey, newsizex, newsizey);
+ sizex = newsizex;
+ sizey = newsizey;
+ mem = newpic;
+ }
+
+ if(has_alpha) {
+ if(num_colors<=256 || sizex<8 || sizey<8) {
+ i->tag = swf_InsertTag(i->tag,ST_DEFINEBITSLOSSLESS2);
+ swf_SetU16(i->tag, bitid);
+ swf_SetLosslessImage(i->tag,mem,sizex,sizey);
+ } else {
+ /*TODO: check what is smaller */
+ i->tag = swf_InsertTag(i->tag,ST_DEFINEBITSJPEG3);
+ swf_SetU16(i->tag, bitid);
+ swf_SetJPEGBits3(i->tag,sizex,sizey,mem,config_jpegquality);
+ //swf_SetLosslessImage(i->tag,mem,sizex,sizey);
+ }
+ } else {
+ if(num_colors<=256 || sizex<8) {
+ i->tag = swf_InsertTag(i->tag,ST_DEFINEBITSLOSSLESS);
+ swf_SetU16(i->tag, bitid);
+ swf_SetLosslessImage(i->tag,mem,sizex,sizey);
+ } else {
+ /*TODO: check what is smaller */
+ i->tag = swf_InsertTag(i->tag,ST_DEFINEBITSJPEG2);
+ swf_SetU16(i->tag, bitid);
+ swf_SetJPEGBits2(i->tag,sizex,sizey,mem,config_jpegquality);
+ //swf_SetLosslessImage(i->tag,mem,sizex,sizey);
+ }
+ }
+
+ if(newpic)
+ free(newpic);