⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fbcompose.c

📁 按照官方的说法:Cairo is a vector graphics library with cross-device output support. 翻译过来
💻 C
📖 第 1 页 / 共 5 页
字号:
    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 + -