static double get_spline_len(qspline_abc_t*s)
{
int parts = (int)(sqrt(fabs(s->ax) + fabs(s->ay))*3);
- if(parts < 3) parts = 3;
int i;
double len = 0;
- double r = 1.0/parts;
- double r2 = 1.0/(parts*parts);
+ double r;
+ double r2;
+ if(parts < 3) parts = 3;
+ r = 1.0/parts;
+ r2 = 1.0/(parts*parts);
for(i=0;i<parts;i++)
{
double dx = s->ax*(2*i+1)*r2 + s->bx*r;
double dx = line->x - x;
double dy = line->y - y;
double len = sqrt(dx*dx+dy*dy);
+ double vx;
+ double vy;
+ double lineend = linepos+len;
if(len==0)
continue;
- double vx = dx/len;
- double vy = dy/len;
- double lineend = linepos+len;
+ vx = dx/len;
+ vy = dy/len;
assert(nextpos>=linepos);
//printf("(line) on:%d apos: %d nextpos: %f, line pos: %f, line end: %f\n", on, apos, nextpos, linepos, linepos+len);
while(nextpos<lineend) {
x = line->x; y = line->y;
} else if(line->type == gfx_splineTo) {
qspline_abc_t q;
+ double len, lineend,lastt;
mkspline(&q, x, y, line);
- double len = get_spline_len(&q);
+ len = get_spline_len(&q);
//printf("%f %f -> %f %f, len: %f\n", x, y, line->x, line->y, len);
if(len==0)
continue;
- double lineend = linepos+len;
- double lastt = 0;
+ lineend = linepos+len;
+ lastt = 0;
if(nextpos<linepos)
printf("%f !< %f\n", nextpos, linepos);
assert(nextpos>=linepos);
gfxline_t* gfxtool_dash_line(gfxline_t*line, float*dashes, float phase)
{
gfxdrawer_t d;
+ gfxline_t*result;
gfxdrawer_target_gfxline(&d);
gfxtool_draw_dashed_line(&d, line, dashes, phase);
- gfxline_t*result= (gfxline_t*)d.result(&d);
+ result= (gfxline_t*)d.result(&d);
return result;
}
RGBA col = img[t];
U32 col32 = *(U32*)&img[t];
int i;
+ int csize;
U32 hash;
+ U32* cpal;
if(col32 == lastcol32)
continue;
hash = (col32 >> 17) ^ col32;
hash ^= ((hash>>8) + 1) ^ hash;
hash &= 255;
- int csize = size[hash];
- U32* cpal = &pal[hash*256];
+ csize = size[hash];
+ cpal = &pal[hash*256];
for(i=0;i<csize;i++) {
if(col32 == cpal[i])
break;
void swf_SetLosslessImage(TAG*tag, RGBA*data, int width, int height)
{
int hasalpha = swf_ImageHasAlpha(data, width, height);
+ int num;
if(!hasalpha) {
tag->id = ST_DEFINEBITSLOSSLESS;
} else {
tag->id = ST_DEFINEBITSLOSSLESS2;
/* TODO: premultiply alpha? */
}
- int num = swf_ImageGetNumberOfPaletteEntries(data, width, height, 0);
+ num = swf_ImageGetNumberOfPaletteEntries(data, width, height, 0);
if(num>1 && num<=256) {
RGBA*palette = (RGBA*)malloc(sizeof(RGBA)*num);
- swf_ImageGetNumberOfPaletteEntries(data, width, height, palette);
int width2 = BYTES_PER_SCANLINE(width);
U8*data2 = (U8*)malloc(width2*height);
int len = width*height;
int x,y;
int r;
+ swf_ImageGetNumberOfPaletteEntries(data, width, height, palette);
for(y=0;y<height;y++) {
RGBA*src = &data[width*y];
U8*dest = &data2[width2*y];
if(newwidth<=width) {
for(x=0;x<newwidth;x++) {
- lblockx[x] = p_x;
double ex = px + fx;
int fromx = (int)px;
int tox = (int)ex;
int xweight = (int)(rem*256/fx);
int xx;
int w = 0;
+ lblockx[x] = p_x;
if(tox>=width) tox = width-1;
for(xx=fromx;xx<=tox;xx++) {
if(xx==fromx && xx==tox) p_x->weight = 256;
}
} else {
for(x=0;x<newwidth;x++) {
- lblockx[x] = p_x;
int ix1 = (int)px;
int ix2 = ((int)px)+1;
- if(ix2>=width) ix2=width-1;
double r = px-ix1;
+ if(ix2>=width) ix2=width-1;
+ lblockx[x] = p_x;
if(bicubic)
r = -2*r*r*r+3*r*r;
p_x[0].weight = (int)(256*(1-r));
RGBA* swf_ImageScale(RGBA*data, int width, int height, int newwidth, int newheight)
{
- if(newwidth<1 || newheight<1)
- return 0;
int x,y;
- RGBA* newdata= (RGBA*)malloc(newwidth*newheight*sizeof(RGBA));
+ RGBA* newdata;
scale_lookup_t *p, **lblockx,**lblocky;
- rgba_int_t*tmpline = (rgba_int_t*)malloc(width*sizeof(rgba_int_t));
+ rgba_int_t*tmpline;
+
+ if(newwidth<1 || newheight<1)
+ return 0;
+
+ tmpline = (rgba_int_t*)malloc(width*sizeof(rgba_int_t));
+ newdata = (RGBA*)malloc(newwidth*newheight*sizeof(RGBA));
lblockx = make_scale_lookup(width, newwidth);
lblocky = make_scale_lookup(height, newheight);
/* create lookup table for y */
rgba_int_t*l = tmpline;
- scale_lookup_t*p_y;
+ scale_lookup_t*p_y,*p_x;
memset(tmpline, 0, width*sizeof(rgba_int_t));
for(p_y=lblocky[y];p_y<lblocky[y+1];p_y++) {
RGBA*line = &data[p_y->pos];
}
/* process x direction */
- scale_lookup_t*p_x = lblockx[0];
+ p_x = lblockx[0];
for(x=0;x<newwidth;x++) {
unsigned int r=0,g=0,b=0,a=0;
scale_lookup_t*p_x_to = lblockx[x+1];