📄 fbcompose.c
字号:
int i; for (i = 0; i < width; ++i) { CARD32 p = Fetch4(bits, i + x); p |= p << 4; *buffer++ = p << 24; }}static FASTCALL voidfbFetch_r1g2b1 (const FbBits *bits, int x, int width, CARD32 *buffer, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 p = Fetch4(bits, i + x); CARD32 r,g,b; r = ((p & 0x8) * 0xff) << 13; g = ((p & 0x6) * 0x55) << 7; b = ((p & 0x1) * 0xff); *buffer++ = 0xff000000|r|g|b; }}static FASTCALL voidfbFetch_b1g2r1 (const FbBits *bits, int x, int width, CARD32 *buffer, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 p = Fetch4(bits, i + x); CARD32 r,g,b; b = ((p & 0x8) * 0xff) >> 3; g = ((p & 0x6) * 0x55) << 7; r = ((p & 0x1) * 0xff) << 16; *buffer++ = 0xff000000|r|g|b; }}static FASTCALL voidfbFetch_a1r1g1b1 (const FbBits *bits, int x, int width, CARD32 *buffer, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 p = Fetch4(bits, i + x); CARD32 a,r,g,b; a = ((p & 0x8) * 0xff) << 21; r = ((p & 0x4) * 0xff) << 14; g = ((p & 0x2) * 0xff) << 7; b = ((p & 0x1) * 0xff); *buffer++ = a|r|g|b; }}static FASTCALL voidfbFetch_a1b1g1r1 (const FbBits *bits, int x, int width, CARD32 *buffer, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 p = Fetch4(bits, i + x); CARD32 a,r,g,b; a = ((p & 0x8) * 0xff) << 21; r = ((p & 0x4) * 0xff) >> 3; g = ((p & 0x2) * 0xff) << 7; b = ((p & 0x1) * 0xff) << 16; *buffer++ = a|r|g|b; }}static FASTCALL voidfbFetch_c4 (const FbBits *bits, int x, int width, CARD32 *buffer, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 p = Fetch4(bits, i + x); *buffer++ = indexed->rgba[p]; }}static FASTCALL voidfbFetch_a1 (const FbBits *bits, int x, int width, CARD32 *buffer, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 p = ((CARD32 *)bits)[(i + x) >> 5]; CARD32 a;#if BITMAP_BIT_ORDER == MSBFirst a = p >> (0x1f - ((i+x) & 0x1f));#else a = p >> ((i+x) & 0x1f);#endif a = a & 1; a |= a << 1; a |= a << 2; a |= a << 4; *buffer++ = a << 24; }}static FASTCALL voidfbFetch_g1 (const FbBits *bits, int x, int width, CARD32 *buffer, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 p = ((CARD32 *)bits)[(i+x) >> 5]; CARD32 a;#if BITMAP_BIT_ORDER == MSBFirst a = p >> (0x1f - ((i+x) & 0x1f));#else a = p >> ((i+x) & 0x1f);#endif a = a & 1; *buffer++ = indexed->rgba[a]; }}static fetchProc fetchProcForPicture (PicturePtr pict){ switch(pict->format_code) { case PICT_a8r8g8b8: return fbFetch_a8r8g8b8; case PICT_x8r8g8b8: return fbFetch_x8r8g8b8; case PICT_a8b8g8r8: return fbFetch_a8b8g8r8; case PICT_x8b8g8r8: return fbFetch_x8b8g8r8; /* 24bpp formats */ case PICT_r8g8b8: return fbFetch_r8g8b8; case PICT_b8g8r8: return fbFetch_b8g8r8; /* 16bpp formats */ case PICT_r5g6b5: return fbFetch_r5g6b5; case PICT_b5g6r5: return fbFetch_b5g6r5; case PICT_a1r5g5b5: return fbFetch_a1r5g5b5; case PICT_x1r5g5b5: return fbFetch_x1r5g5b5; case PICT_a1b5g5r5: return fbFetch_a1b5g5r5; case PICT_x1b5g5r5: return fbFetch_x1b5g5r5; case PICT_a4r4g4b4: return fbFetch_a4r4g4b4; case PICT_x4r4g4b4: return fbFetch_x4r4g4b4; case PICT_a4b4g4r4: return fbFetch_a4b4g4r4; case PICT_x4b4g4r4: return fbFetch_x4b4g4r4; /* 8bpp formats */ case PICT_a8: return fbFetch_a8; case PICT_r3g3b2: return fbFetch_r3g3b2; case PICT_b2g3r3: return fbFetch_b2g3r3; case PICT_a2r2g2b2: return fbFetch_a2r2g2b2; case PICT_a2b2g2r2: return fbFetch_a2b2g2r2; case PICT_c8: return fbFetch_c8; case PICT_g8: return fbFetch_c8; /* 4bpp formats */ case PICT_a4: return fbFetch_a4; case PICT_r1g2b1: return fbFetch_r1g2b1; case PICT_b1g2r1: return fbFetch_b1g2r1; case PICT_a1r1g1b1: return fbFetch_a1r1g1b1; case PICT_a1b1g1r1: return fbFetch_a1b1g1r1; case PICT_c4: return fbFetch_c4; case PICT_g4: return fbFetch_c4; /* 1bpp formats */ case PICT_a1: return fbFetch_a1; case PICT_g1: return fbFetch_g1; default: return NULL; }}/* * Pixel wise fetching */typedef FASTCALL CARD32 (*fetchPixelProc)(const FbBits *bits, int offset, miIndexedPtr indexed);static FASTCALL CARD32fbFetchPixel_a8r8g8b8 (const FbBits *bits, int offset, miIndexedPtr indexed){ return ((CARD32 *)bits)[offset];}static FASTCALL CARD32fbFetchPixel_x8r8g8b8 (const FbBits *bits, int offset, miIndexedPtr indexed){ return ((CARD32 *)bits)[offset] | 0xff000000;}static FASTCALL CARD32fbFetchPixel_a8b8g8r8 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD32 *)bits)[offset]; return ((pixel & 0xff000000) | ((pixel >> 16) & 0xff) | (pixel & 0x0000ff00) | ((pixel & 0xff) << 16));}static FASTCALL CARD32fbFetchPixel_x8b8g8r8 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD32 *)bits)[offset]; return ((0xff000000) | ((pixel >> 16) & 0xff) | (pixel & 0x0000ff00) | ((pixel & 0xff) << 16));}static FASTCALL CARD32fbFetchPixel_r8g8b8 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD8 *pixel = ((CARD8 *) bits) + (offset*3);#if IMAGE_BYTE_ORDER == MSBFirst return (0xff000000 | (pixel[0] << 16) | (pixel[1] << 8) | (pixel[2]));#else return (0xff000000 | (pixel[2] << 16) | (pixel[1] << 8) | (pixel[0]));#endif}static FASTCALL CARD32fbFetchPixel_b8g8r8 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD8 *pixel = ((CARD8 *) bits) + (offset*3);#if IMAGE_BYTE_ORDER == MSBFirst return (0xff000000 | (pixel[2] << 16) | (pixel[1] << 8) | (pixel[0]));#else return (0xff000000 | (pixel[0] << 16) | (pixel[1] << 8) | (pixel[2]));#endif}static FASTCALL CARD32fbFetchPixel_r5g6b5 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD16 *) bits)[offset]; CARD32 r,g,b; r = ((pixel & 0xf800) | ((pixel & 0xe000) >> 5)) << 8; g = ((pixel & 0x07e0) | ((pixel & 0x0600) >> 6)) << 5; b = ((pixel & 0x001c) | ((pixel & 0x001f) << 5)) >> 2; return (0xff000000 | r | g | b);}static FASTCALL CARD32fbFetchPixel_b5g6r5 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD16 *) bits)[offset]; CARD32 r,g,b; b = ((pixel & 0xf800) | ((pixel & 0xe000) >> 5)) >> 8; g = ((pixel & 0x07e0) | ((pixel & 0x0600) >> 6)) << 5; r = ((pixel & 0x001c) | ((pixel & 0x001f) << 5)) << 14; return (0xff000000 | r | g | b);}static FASTCALL CARD32fbFetchPixel_a1r5g5b5 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD16 *) bits)[offset]; CARD32 a,r,g,b; a = (CARD32) ((CARD8) (0 - ((pixel & 0x8000) >> 15))) << 24; r = ((pixel & 0x7c00) | ((pixel & 0x7000) >> 5)) << 9; g = ((pixel & 0x03e0) | ((pixel & 0x0380) >> 5)) << 6; b = ((pixel & 0x001c) | ((pixel & 0x001f) << 5)) >> 2; return (a | r | g | b);}static FASTCALL CARD32fbFetchPixel_x1r5g5b5 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD16 *) bits)[offset]; CARD32 r,g,b; r = ((pixel & 0x7c00) | ((pixel & 0x7000) >> 5)) << 9; g = ((pixel & 0x03e0) | ((pixel & 0x0380) >> 5)) << 6; b = ((pixel & 0x001c) | ((pixel & 0x001f) << 5)) >> 2; return (0xff000000 | r | g | b);}static FASTCALL CARD32fbFetchPixel_a1b5g5r5 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD16 *) bits)[offset]; CARD32 a,r,g,b; a = (CARD32) ((CARD8) (0 - ((pixel & 0x8000) >> 15))) << 24; b = ((pixel & 0x7c00) | ((pixel & 0x7000) >> 5)) >> 7; g = ((pixel & 0x03e0) | ((pixel & 0x0380) >> 5)) << 6; r = ((pixel & 0x001c) | ((pixel & 0x001f) << 5)) << 14; return (a | r | g | b);}static FASTCALL CARD32fbFetchPixel_x1b5g5r5 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD16 *) bits)[offset]; CARD32 r,g,b; b = ((pixel & 0x7c00) | ((pixel & 0x7000) >> 5)) >> 7; g = ((pixel & 0x03e0) | ((pixel & 0x0380) >> 5)) << 6; r = ((pixel & 0x001c) | ((pixel & 0x001f) << 5)) << 14; return (0xff000000 | r | g | b);}static FASTCALL CARD32fbFetchPixel_a4r4g4b4 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD16 *) bits)[offset]; CARD32 a,r,g,b; a = ((pixel & 0xf000) | ((pixel & 0xf000) >> 4)) << 16; r = ((pixel & 0x0f00) | ((pixel & 0x0f00) >> 4)) << 12; g = ((pixel & 0x00f0) | ((pixel & 0x00f0) >> 4)) << 8; b = ((pixel & 0x000f) | ((pixel & 0x000f) << 4)); return (a | r | g | b);}static FASTCALL CARD32fbFetchPixel_x4r4g4b4 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD16 *) bits)[offset]; CARD32 r,g,b; r = ((pixel & 0x0f00) | ((pixel & 0x0f00) >> 4)) << 12; g = ((pixel & 0x00f0) | ((pixel & 0x00f0) >> 4)) << 8; b = ((pixel & 0x000f) | ((pixel & 0x000f) << 4)); return (0xff000000 | r | g | b);}static FASTCALL CARD32fbFetchPixel_a4b4g4r4 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD16 *) bits)[offset]; CARD32 a,r,g,b; a = ((pixel & 0xf000) | ((pixel & 0xf000) >> 4)) << 16; b = ((pixel & 0x0f00) | ((pixel & 0x0f00) >> 4)) << 12; g = ((pixel & 0x00f0) | ((pixel & 0x00f0) >> 4)) << 8; r = ((pixel & 0x000f) | ((pixel & 0x000f) << 4)); return (a | r | g | b);}static FASTCALL CARD32fbFetchPixel_x4b4g4r4 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD16 *) bits)[offset]; CARD32 r,g,b; b = ((pixel & 0x0f00) | ((pixel & 0x0f00) >> 4)) << 12; g = ((pixel & 0x00f0) | ((pixel & 0x00f0) >> 4)) << 8; r = ((pixel & 0x000f) | ((pixel & 0x000f) << 4)); return (0xff000000 | r | g | b);}static FASTCALL CARD32fbFetchPixel_a8 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD8 *) bits)[offset]; return pixel << 24;}static FASTCALL CARD32fbFetchPixel_r3g3b2 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD8 *) bits)[offset]; CARD32 r,g,b; r = ((pixel & 0xe0) | ((pixel & 0xe0) >> 3) | ((pixel & 0xc0) >> 6)) << 16; g = ((pixel & 0x1c) | ((pixel & 0x18) >> 3) | ((pixel & 0x1c) << 3)) << 8; b = (((pixel & 0x03) ) | ((pixel & 0x03) << 2) | ((pixel & 0x03) << 4) | ((pixel & 0x03) << 6)); return (0xff000000 | r | g | b);}static FASTCALL CARD32fbFetchPixel_b2g3r3 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD8 *) bits)[offset]; CARD32 r,g,b; b = (((pixel & 0xc0) ) | ((pixel & 0xc0) >> 2) | ((pixel & 0xc0) >> 4) | ((pixel & 0xc0) >> 6)); g = ((pixel & 0x38) | ((pixel & 0x38) >> 3) | ((pixel & 0x30) << 2)) << 8; r = (((pixel & 0x07) ) | ((pixel & 0x07) << 3) | ((pixel & 0x06) << 6)) << 16; return (0xff000000 | r | g | b);}static FASTCALL CARD32fbFetchPixel_a2r2g2b2 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD8 *) bits)[offset]; CARD32 a,r,g,b; a = ((pixel & 0xc0) * 0x55) << 18; r = ((pixel & 0x30) * 0x55) << 12; g = ((pixel & 0x0c) * 0x55) << 6; b = ((pixel & 0x03) * 0x55); return a|r|g|b;}static FASTCALL CARD32fbFetchPixel_a2b2g2r2 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD8 *) bits)[offset]; CARD32 a,r,g,b; a = ((pixel & 0xc0) * 0x55) << 18; b = ((pixel & 0x30) * 0x55) >> 6; g = ((pixel & 0x0c) * 0x55) << 6; r = ((pixel & 0x03) * 0x55) << 16; return a|r|g|b;}static FASTCALL CARD32fbFetchPixel_c8 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD8 *) bits)[offset]; return indexed->rgba[pixel];}#define Fetch8(l,o) (((CARD8 *) (l))[(o) >> 2])#if IMAGE_BYTE_ORDER == MSBFirst#define Fetch4(l,o) ((o) & 2 ? Fetch8(l,o) & 0xf : Fetch8(l,o) >> 4)#else#define Fetch4(l,o) ((o) & 2 ? Fetch8(l,o) >> 4 : Fetch8(l,o) & 0xf)#endifstatic FASTCALL CARD32fbFetchPixel_a4 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = Fetch4(bits, offset); pixel |= pixel << 4; return pixel << 24;}static FASTCALL CARD32fbFetchPixel_r1g2b1 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = Fetch4(bits, offset); CARD32 r,g,b; r = ((pixel & 0x8) * 0xff) << 13; g = ((pixel & 0x6) * 0x55) << 7; b = ((pixel & 0x1) * 0xff); return 0xff000000|r|g|b;}static FASTCALL CARD32fbFetchPixel_b1g2r1 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = Fetch4(bits, offset); CARD32 r,g,b; b = ((pixel & 0x8) * 0xff) >> 3; g = ((pixel & 0x6) * 0x55) << 7; r = ((pixel & 0x1) * 0xff) << 16; return 0xff000000|r|g|b;}static FASTCALL CARD32fbFetchPixel_a1r1g1b1 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = Fetch4(bits, offset); CARD32 a,r,g,b; a = ((pixel & 0x8) * 0xff) << 21;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -