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

📄 fbcompose.c

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