7 void gl_convertRGB_to_5R6G5B(unsigned short *pixmap
,unsigned char *rgb
,
16 pixmap
[i
]=((p
[0]&0xF8)<<8) | ((p
[1]&0xFC)<<3) | ((p
[2]&0xF8)>>3);
21 void gl_convertRGB_to_8A8R8G8B(unsigned int *pixmap
, unsigned char *rgb
,
30 pixmap
[i
]=(((unsigned int)p
[0])<<16) |
31 (((unsigned int)p
[1])<<8) |
32 (((unsigned int)p
[2]));
38 * linear interpolation with xf,yf normalized to 2^16
41 #define INTERP_NORM_BITS 16
42 #define INTERP_NORM (1 << INTERP_NORM_BITS)
44 static inline int interpolate(int v00
,int v01
,int v10
,int xf
,int yf
)
46 return v00
+(((v01
-v00
)*xf
+ (v10
-v00
)*yf
) >> INTERP_NORM_BITS
);
51 * TODO: more accurate resampling
54 void gl_resizeImage(unsigned char *dest
,int xsize_dest
,int ysize_dest
,
55 unsigned char *src
,int xsize_src
,int ysize_src
)
57 unsigned char *pix
,*pix_src
;
58 float x1
,y1
,x1inc
,y1inc
;
59 int xi
,yi
,j
,xf
,yf
,x
,y
;
64 x1inc
=(float) (xsize_src
- 1) / (float) (xsize_dest
- 1);
65 y1inc
=(float) (ysize_src
- 1) / (float) (ysize_dest
- 1);
68 for(y
=0;y
<ysize_dest
;y
++) {
70 for(x
=0;x
<xsize_dest
;x
++) {
73 xf
=(int) ((x1
- floor(x1
)) * INTERP_NORM
);
74 yf
=(int) ((y1
- floor(y1
)) * INTERP_NORM
);
76 if ((xf
+yf
) <= INTERP_NORM
) {
78 pix
[j
]=interpolate(pix_src
[(yi
*xsize_src
+xi
)*3+j
],
79 pix_src
[(yi
*xsize_src
+xi
+1)*3+j
],
80 pix_src
[((yi
+1)*xsize_src
+xi
)*3+j
],
87 pix
[j
]=interpolate(pix_src
[((yi
+1)*xsize_src
+xi
+1)*3+j
],
88 pix_src
[((yi
+1)*xsize_src
+xi
)*3+j
],
89 pix_src
[(yi
*xsize_src
+xi
+1)*3+j
],
103 /* resizing with no interlating nor nearest pixel */
105 void gl_resizeImageNoInterpolate(unsigned char *dest
,int xsize_dest
,int ysize_dest
,
106 unsigned char *src
,int xsize_src
,int ysize_src
)
108 unsigned char *pix
,*pix_src
,*pix1
;
109 int x1
,y1
,x1inc
,y1inc
;
115 x1inc
=(int)((float) ((xsize_src
)<<FRAC_BITS
) / (float) (xsize_dest
));
116 y1inc
=(int)((float) ((ysize_src
)<<FRAC_BITS
) / (float) (ysize_dest
));
119 for(y
=0;y
<ysize_dest
;y
++) {
121 for(x
=0;x
<xsize_dest
;x
++) {
124 pix1
=pix_src
+(yi
*xsize_src
+xi
)*3;