int y = js[x*3+0];
int u = js[x*3+1];
int v = js[x*3+1];
- // untested:
js[x*3+0] = y + ((360*(v-128))>>8);
- js[x*3+1] = y - ((88*(u-128)-183*(v-128))>>8);
+ js[x*3+1] = y - ((88*(u-128)+183*(v-128))>>8);
js[x*3+2] = y + ((455 * (u-128))>>8);
}
}
fprintf(stderr, "rfxswf: unknown bitmap type %d\n", bitmap_flags);
return -1;
}
-
+
swf_SetU8(t,bitmap_flags);
swf_SetU16(t,width);
swf_SetU16(t,height);
-
- /* fix for buggy flash players which can't handle plain-color bitmaps
- TODO: is there a better solution?
- */
- { int s;
- int l=32;
- for(s=0;s<height*width*4;s+=4) {
- ((U8*)bitmap)[s+0] = s;
- if(s>l)
- break;
- }
- }
-
{ z_stream zs;
memset(&zs,0x00,sizeof(z_stream));
} else res = -3; // zlib error
}
+
+ while(t->len < 64) { /* actually, 63 and above is o.k., but let's stay on the safe side */
+
+ /* Flash players up to MX crash or do strange things if they encounter a
+ DefineLossless Tag with a payload of less than 63 bytes. They also
+ substitute the whole bitmap by a red rectangle.
+
+ This loop fills up the tag with zeroes so that this doesn't happen.
+ */
+ swf_SetU8(t, 0);
+ }
return res;
}
int swf_SetLosslessBitsIndexed(TAG * t,U16 width,U16 height,U8 * bitmap,RGBA * palette,U16 ncolors)
{ RGBA * pal = palette;
int bps = BYTES_PER_SCANLINE(width);
- U8 * data;
int res = 0;
if (!pal) // create default palette for grayscale images
deflateEnd(&zs);
- if (zs.next_out>data) swf_SetBlock(t,data,zs.next_out-data);
-
free(zpal);
} else res = -2; // memory error
} else res = -3; // zlib error
- free(data);
}
if (!palette) free(pal);