Changeset 29153 for titan/titan


Ignore:
Timestamp:
06/02/14 20:38:16 (10 years ago)
Author:
gost
Message:

[titan] new function... resize

Location:
titan/titan
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • titan/titan/header.h

    r29094 r29153  
    663663inline void drawpixelfastfb(struct fb* node, int posx, int posy, unsigned long color);
    664664inline void drawpixelfb(struct fb* node, int posx, int posy, unsigned long color);
     665unsigned char * resize(unsigned char *origin, int ox, int oy, int dx, int dy, int type, unsigned char * dst, int flag)
    665666
    666667//volume.h
  • titan/titan/skin.h

    r29094 r29153  
    43464346}
    43474347
     4348unsigned char * resize(unsigned char *origin, int ox, int oy, int dx, int dy, int type, unsigned char * dst, int flag)
     4349{
     4350        unsigned char * cr;
     4351
     4352        if(dst == NULL)
     4353        {
     4354                cr = (unsigned char*) malloc(dx*dy*3);
     4355
     4356                if(cr == NULL)
     4357                {
     4358                        printf("Error: malloc\n");
     4359                        return(origin);
     4360                }
     4361        }
     4362        else
     4363                cr = dst;
     4364
     4365        if(type == 1)
     4366        {
     4367                unsigned char *p,*l;
     4368                int i,j,k,ip;
     4369                l = cr;
     4370
     4371                for(j=0; j<dy; j++, l += dx*3)
     4372                {
     4373                        p = origin + (j*oy/dy*ox*3);
     4374                        for(i=0, k=0; i<dx; i++, k+=3)
     4375                        {
     4376                                ip=i*ox/dx*3;
     4377                                memmove(l+k, p+ip, 3);
     4378                        }
     4379                }
     4380        }
     4381        else
     4382        {
     4383                unsigned char *p,*q;
     4384                int i,j,k,l,ya,yb;
     4385                int sq,r,g,b;
     4386
     4387                p=cr;
     4388
     4389                int xa_v[dx];
     4390                for(i=0;i<dx;i++)
     4391                        xa_v[i] = i*ox/dx;
     4392                int xb_v[dx+1];
     4393               
     4394                for(i=0;i<dx;i++)
     4395                {
     4396                        xb_v[i]= (i+1)*ox/dx;
     4397                        if(xb_v[i]>=ox)
     4398                                xb_v[i]=ox-1;
     4399                }
     4400               
     4401                for(j=0;j<dy;j++)
     4402                {
     4403                        ya= j*oy/dy;
     4404                        yb= (j+1)*oy/dy; if(yb>=oy) yb=oy-1;
     4405                        for(i=0;i<dx;i++,p+=3)
     4406                        {
     4407                                for(l=ya,r=0,g=0,b=0,sq=0;l<=yb;l++)
     4408                                {
     4409                                        q=origin+((l*ox+xa_v[i])*3);
     4410                                        for(k=xa_v[i];k<=xb_v[i];k++,q+=3,sq++)
     4411                                        {
     4412                                                r+=q[0]; g+=q[1]; b+=q[2];
     4413                                        }
     4414                                }
     4415                                p[0]=r/sq; p[1]=g/sq; p[2]=b/sq;
     4416                        }
     4417                }
     4418        }
     4419       
     4420        if(flag == 1)
     4421                free(origin);
     4422       
     4423        return(cr);
     4424}
     4425
    43484426#endif
Note: See TracChangeset for help on using the changeset viewer.