📄 fbcompose.c
字号:
r = ((pixel & 0x4) * 0xff) << 14; g = ((pixel & 0x2) * 0xff) << 7; b = ((pixel & 0x1) * 0xff); return a|r|g|b;}static FASTCALL CARD32fbFetchPixel_a1b1g1r1 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = Fetch4(bits, offset); CARD32 a,r,g,b; a = ((pixel & 0x8) * 0xff) << 21; r = ((pixel & 0x4) * 0xff) >> 3; g = ((pixel & 0x2) * 0xff) << 7; b = ((pixel & 0x1) * 0xff) << 16; return a|r|g|b;}static FASTCALL CARD32fbFetchPixel_c4 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = Fetch4(bits, offset); return indexed->rgba[pixel];}static FASTCALL CARD32fbFetchPixel_a1 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD32 *)bits)[offset >> 5]; CARD32 a;#if BITMAP_BIT_ORDER == MSBFirst a = pixel >> (0x1f - (offset & 0x1f));#else a = pixel >> (offset & 0x1f);#endif a = a & 1; a |= a << 1; a |= a << 2; a |= a << 4; return a << 24;}static FASTCALL CARD32fbFetchPixel_g1 (const FbBits *bits, int offset, miIndexedPtr indexed){ CARD32 pixel = ((CARD32 *)bits)[offset >> 5]; CARD32 a;#if BITMAP_BIT_ORDER == MSBFirst a = pixel >> (0x1f - (offset & 0x1f));#else a = pixel >> (offset & 0x1f);#endif a = a & 1; return indexed->rgba[a];}static fetchPixelProc fetchPixelProcForPicture (PicturePtr pict){ switch(pict->format_code) { case PICT_a8r8g8b8: return fbFetchPixel_a8r8g8b8; case PICT_x8r8g8b8: return fbFetchPixel_x8r8g8b8; case PICT_a8b8g8r8: return fbFetchPixel_a8b8g8r8; case PICT_x8b8g8r8: return fbFetchPixel_x8b8g8r8; /* 24bpp formats */ case PICT_r8g8b8: return fbFetchPixel_r8g8b8; case PICT_b8g8r8: return fbFetchPixel_b8g8r8; /* 16bpp formats */ case PICT_r5g6b5: return fbFetchPixel_r5g6b5; case PICT_b5g6r5: return fbFetchPixel_b5g6r5; case PICT_a1r5g5b5: return fbFetchPixel_a1r5g5b5; case PICT_x1r5g5b5: return fbFetchPixel_x1r5g5b5; case PICT_a1b5g5r5: return fbFetchPixel_a1b5g5r5; case PICT_x1b5g5r5: return fbFetchPixel_x1b5g5r5; case PICT_a4r4g4b4: return fbFetchPixel_a4r4g4b4; case PICT_x4r4g4b4: return fbFetchPixel_x4r4g4b4; case PICT_a4b4g4r4: return fbFetchPixel_a4b4g4r4; case PICT_x4b4g4r4: return fbFetchPixel_x4b4g4r4; /* 8bpp formats */ case PICT_a8: return fbFetchPixel_a8; case PICT_r3g3b2: return fbFetchPixel_r3g3b2; case PICT_b2g3r3: return fbFetchPixel_b2g3r3; case PICT_a2r2g2b2: return fbFetchPixel_a2r2g2b2; case PICT_a2b2g2r2: return fbFetchPixel_a2b2g2r2; case PICT_c8: return fbFetchPixel_c8; case PICT_g8: return fbFetchPixel_c8; /* 4bpp formats */ case PICT_a4: return fbFetchPixel_a4; case PICT_r1g2b1: return fbFetchPixel_r1g2b1; case PICT_b1g2r1: return fbFetchPixel_b1g2r1; case PICT_a1r1g1b1: return fbFetchPixel_a1r1g1b1; case PICT_a1b1g1r1: return fbFetchPixel_a1b1g1r1; case PICT_c4: return fbFetchPixel_c4; case PICT_g4: return fbFetchPixel_c4; /* 1bpp formats */ case PICT_a1: return fbFetchPixel_a1; case PICT_g1: return fbFetchPixel_g1; default: return NULL; }}/* * All the store functions */typedef FASTCALL void (*storeProc) (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed);#define Splita(v) CARD32 a = ((v) >> 24), r = ((v) >> 16) & 0xff, g = ((v) >> 8) & 0xff, b = (v) & 0xff#define Split(v) CARD32 r = ((v) >> 16) & 0xff, g = ((v) >> 8) & 0xff, b = (v) & 0xffstatic FASTCALL voidfbStore_a8r8g8b8 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ memcpy(((CARD32 *)bits) + x, values, width*sizeof(CARD32));}static FASTCALL voidfbStore_x8r8g8b8 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD32 *pixel = (CARD32 *)bits + x; for (i = 0; i < width; ++i) *pixel++ = values[i] & 0xffffff;}static FASTCALL voidfbStore_a8b8g8r8 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD32 *pixel = (CARD32 *)bits + x; for (i = 0; i < width; ++i) *pixel++ = (values[i] & 0xff00ff00) | ((values[i] >> 16) & 0xff) | ((values[i] & 0xff) << 16);}static FASTCALL voidfbStore_x8b8g8r8 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD32 *pixel = (CARD32 *)bits + x; for (i = 0; i < width; ++i) *pixel++ = (values[i] & 0x0000ff00) | ((values[i] >> 16) & 0xff) | ((values[i] & 0xff) << 16);}static FASTCALL voidfbStore_r8g8b8 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD8 *pixel = ((CARD8 *) bits) + x; for (i = 0; i < width; ++i) { Store24(pixel, values[i]); pixel += 3; }}static FASTCALL voidfbStore_b8g8r8 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD8 *pixel = ((CARD8 *) bits) + x; for (i = 0; i < width; ++i) {#if IMAGE_BYTE_ORDER == MSBFirst *pixel++ = Blue(values[i]); *pixel++ = Green(values[i]); *pixel++ = Red(values[i]);#else *pixel++ = Red(values[i]); *pixel++ = Green(values[i]); *pixel++ = Blue(values[i]);#endif }}static FASTCALL voidfbStore_r5g6b5 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD16 *pixel = ((CARD16 *) bits) + x; for (i = 0; i < width; ++i) { CARD32 s = values[i]; *pixel++ = ((s >> 3) & 0x001f) | ((s >> 5) & 0x07e0) | ((s >> 8) & 0xf800); }}static FASTCALL voidfbStore_b5g6r5 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD16 *pixel = ((CARD16 *) bits) + x; for (i = 0; i < width; ++i) { Split(values[i]); *pixel++ = (((b << 8) & 0xf800) | ((g << 3) & 0x07e0) | ((r >> 3) )); }}static FASTCALL voidfbStore_a1r5g5b5 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD16 *pixel = ((CARD16 *) bits) + x; for (i = 0; i < width; ++i) { Splita(values[i]); *pixel++ = (((a << 8) & 0x8000) | ((r << 7) & 0x7c00) | ((g << 2) & 0x03e0) | ((b >> 3) )); }}static FASTCALL voidfbStore_x1r5g5b5 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD16 *pixel = ((CARD16 *) bits) + x; for (i = 0; i < width; ++i) { Split(values[i]); *pixel++ = (((r << 7) & 0x7c00) | ((g << 2) & 0x03e0) | ((b >> 3) )); }}static FASTCALL voidfbStore_a1b5g5r5 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD16 *pixel = ((CARD16 *) bits) + x; for (i = 0; i < width; ++i) { Splita(values[i]); *pixel++ = (((a << 8) & 0x8000) | ((b << 7) & 0x7c00) | ((g << 2) & 0x03e0) | ((r >> 3) )); }}static FASTCALL voidfbStore_x1b5g5r5 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD16 *pixel = ((CARD16 *) bits) + x; for (i = 0; i < width; ++i) { Split(values[i]); *pixel++ = (((b << 7) & 0x7c00) | ((g << 2) & 0x03e0) | ((r >> 3) )); }}static FASTCALL voidfbStore_a4r4g4b4 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD16 *pixel = ((CARD16 *) bits) + x; for (i = 0; i < width; ++i) { Splita(values[i]); *pixel++ = (((a << 8) & 0xf000) | ((r << 4) & 0x0f00) | ((g ) & 0x00f0) | ((b >> 4) )); }}static FASTCALL voidfbStore_x4r4g4b4 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD16 *pixel = ((CARD16 *) bits) + x; for (i = 0; i < width; ++i) { Split(values[i]); *pixel++ = (((r << 4) & 0x0f00) | ((g ) & 0x00f0) | ((b >> 4) )); }}static FASTCALL voidfbStore_a4b4g4r4 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD16 *pixel = ((CARD16 *) bits) + x; for (i = 0; i < width; ++i) { Splita(values[i]); *pixel++ = (((a << 8) & 0xf000) | ((b << 4) & 0x0f00) | ((g ) & 0x00f0) | ((r >> 4) )); }}static FASTCALL voidfbStore_x4b4g4r4 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD16 *pixel = ((CARD16 *) bits) + x; for (i = 0; i < width; ++i) { Split(values[i]); *pixel++ = (((b << 4) & 0x0f00) | ((g ) & 0x00f0) | ((r >> 4) )); }}static FASTCALL voidfbStore_a8 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD8 *pixel = ((CARD8 *) bits) + x; for (i = 0; i < width; ++i) { *pixel++ = values[i] >> 24; }}static FASTCALL voidfbStore_r3g3b2 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD8 *pixel = ((CARD8 *) bits) + x; for (i = 0; i < width; ++i) { Split(values[i]); *pixel++ = (((r ) & 0xe0) | ((g >> 3) & 0x1c) | ((b >> 6) )); }}static FASTCALL voidfbStore_b2g3r3 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD8 *pixel = ((CARD8 *) bits) + x; for (i = 0; i < width; ++i) { Split(values[i]); *pixel++ = (((b ) & 0xe0) | ((g >> 3) & 0x1c) | ((r >> 6) )); }}static FASTCALL voidfbStore_a2r2g2b2 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD8 *pixel = ((CARD8 *) bits) + x; for (i = 0; i < width; ++i) { Splita(values[i]); *pixel++ = (((a ) & 0xc0) | ((r >> 2) & 0x30) | ((g >> 4) & 0x0c) | ((b >> 6) )); }}static FASTCALL voidfbStore_c8 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; CARD8 *pixel = ((CARD8 *) bits) + x; for (i = 0; i < width; ++i) { *pixel++ = miIndexToEnt24(indexed,values[i]); }}#define Store8(l,o,v) (((CARD8 *) l)[(o) >> 3] = (v))#if IMAGE_BYTE_ORDER == MSBFirst#define Store4(l,o,v) Store8(l,o,((o) & 4 ? \ (Fetch8(l,o) & 0xf0) | (v) : \ (Fetch8(l,o) & 0x0f) | ((v) << 4)))#else#define Store4(l,o,v) Store8(l,o,((o) & 4 ? \ (Fetch8(l,o) & 0x0f) | ((v) << 4) : \ (Fetch8(l,o) & 0xf0) | (v)))#endifstatic FASTCALL voidfbStore_a4 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { Store4(bits, i + x, values[i]>>28); }}static FASTCALL voidfbStore_r1g2b1 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 pixel; Split(values[i]); pixel = (((r >> 4) & 0x8) | ((g >> 5) & 0x6) | ((b >> 7) )); Store4(bits, i + x, pixel); }}static FASTCALL voidfbStore_b1g2r1 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 pixel; Split(values[i]); pixel = (((b >> 4) & 0x8) | ((g >> 5) & 0x6) | ((r >> 7) )); Store4(bits, i + x, pixel); }}static FASTCALL voidfbStore_a1r1g1b1 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 pixel; Splita(values[i]); pixel = (((a >> 4) & 0x8) | ((r >> 5) & 0x4) | ((g >> 6) & 0x2) | ((b >> 7) )); Store4(bits, i + x, pixel); }}static FASTCALL voidfbStore_a1b1g1r1 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 pixel; Splita(values[i]); pixel = (((a >> 4) & 0x8) | ((b >> 5) & 0x4) | ((g >> 6) & 0x2) | ((r >> 7) )); Store4(bits, i + x, pixel); }}static FASTCALL voidfbStore_c4 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 pixel; pixel = miIndexToEnt24(indexed, values[i]); Store4(bits, i + x, pixel); }}static FASTCALL voidfbStore_a1 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 *pixel = ((CARD32 *) bits) + ((i+x) >> 5); CARD32 mask = FbStipMask((i+x) & 0x1f, 1); CARD32 v = values[i] & 0x80000000 ? mask : 0; *pixel = (*pixel & ~mask) | v; }}static FASTCALL voidfbStore_g1 (FbBits *bits, const CARD32 *values, int x, int width, miIndexedPtr indexed){ int i; for (i = 0; i < width; ++i) { CARD32 *pixel = ((CARD32 *) bits) + ((i+x) >> 5); CARD32 mask = FbStipMask((i+x) & 0x1f, 1); CARD32 v = miIndexToEntY24(indexed,values[i]) ? mask : 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -