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

📄 rgb2rgb.c

📁 ffmpeg移植到symbian的全部源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    Writes 1 byte too much and might cause alignment issues on some architectures?    for (i=0; i<num_pixels; i++)        ((unsigned *)(&dst[i*3])) = ((unsigned *)palette)[src[i]];*/    for (i=0; i<num_pixels; i++)    {        //FIXME slow?        dst[0]= palette[src[i]*4+2];        dst[1]= palette[src[i]*4+1];        dst[2]= palette[src[i]*4+0];        dst+= 3;    }}void palette8tobgr24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette){    long i;/*    Writes 1 byte too much and might cause alignment issues on some architectures?    for (i=0; i<num_pixels; i++)        ((unsigned *)(&dst[i*3])) = ((unsigned *)palette)[src[i]];*/    for (i=0; i<num_pixels; i++)    {        //FIXME slow?        dst[0]= palette[src[i]*4+0];        dst[1]= palette[src[i]*4+1];        dst[2]= palette[src[i]*4+2];        dst+= 3;    }}/** * Palette is assumed to contain BGR16, see rgb32to16 to convert the palette. */void palette8torgb16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette){    long i;    for (i=0; i<num_pixels; i++)        ((uint16_t *)dst)[i] = ((const uint16_t *)palette)[src[i]];}void palette8tobgr16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette){    long i;    for (i=0; i<num_pixels; i++)        ((uint16_t *)dst)[i] = bswap_16(((const uint16_t *)palette)[src[i]]);}/** * Palette is assumed to contain BGR15, see rgb32to15 to convert the palette. */void palette8torgb15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette){    long i;    for (i=0; i<num_pixels; i++)        ((uint16_t *)dst)[i] = ((const uint16_t *)palette)[src[i]];}void palette8tobgr15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette){    long i;    for (i=0; i<num_pixels; i++)        ((uint16_t *)dst)[i] = bswap_16(((const uint16_t *)palette)[src[i]]);}void rgb32tobgr24(const uint8_t *src, uint8_t *dst, long src_size){    long i;    long num_pixels = src_size >> 2;    for (i=0; i<num_pixels; i++)    {        #ifdef WORDS_BIGENDIAN            /* RGB32 (= A,B,G,R) -> BGR24 (= B,G,R) */            dst[3*i + 0] = src[4*i + 1];            dst[3*i + 1] = src[4*i + 2];            dst[3*i + 2] = src[4*i + 3];        #else            dst[3*i + 0] = src[4*i + 2];            dst[3*i + 1] = src[4*i + 1];            dst[3*i + 2] = src[4*i + 0];        #endif    }}void rgb24tobgr32(const uint8_t *src, uint8_t *dst, long src_size){    long i;    for (i=0; 3*i<src_size; i++)    {        #ifdef WORDS_BIGENDIAN            /* RGB24 (= R,G,B) -> BGR32 (= A,R,G,B) */            dst[4*i + 0] = 0;            dst[4*i + 1] = src[3*i + 0];            dst[4*i + 2] = src[3*i + 1];            dst[4*i + 3] = src[3*i + 2];        #else            dst[4*i + 0] = src[3*i + 2];            dst[4*i + 1] = src[3*i + 1];            dst[4*i + 2] = src[3*i + 0];            dst[4*i + 3] = 0;        #endif    }}void rgb16tobgr32(const uint8_t *src, uint8_t *dst, long src_size){    const uint16_t *end;    uint8_t *d = dst;    const uint16_t *s = (const uint16_t *)src;    end = s + src_size/2;    while (s < end)    {        register uint16_t bgr;        bgr = *s++;        #ifdef WORDS_BIGENDIAN            *d++ = 0;            *d++ = (bgr&0x1F)<<3;            *d++ = (bgr&0x7E0)>>3;            *d++ = (bgr&0xF800)>>8;        #else            *d++ = (bgr&0xF800)>>8;            *d++ = (bgr&0x7E0)>>3;            *d++ = (bgr&0x1F)<<3;            *d++ = 0;        #endif    }}void rgb16tobgr24(const uint8_t *src, uint8_t *dst, long src_size){    const uint16_t *end;    uint8_t *d = dst;    const uint16_t *s = (const uint16_t *)src;    end = s + src_size/2;    while (s < end)    {        register uint16_t bgr;        bgr = *s++;        *d++ = (bgr&0xF800)>>8;        *d++ = (bgr&0x7E0)>>3;        *d++ = (bgr&0x1F)<<3;    }}void rgb16tobgr16(const uint8_t *src, uint8_t *dst, long src_size){    long i;    long num_pixels = src_size >> 1;    for (i=0; i<num_pixels; i++)    {        unsigned b,g,r;        register uint16_t rgb;        rgb = src[2*i];        r = rgb&0x1F;        g = (rgb&0x7E0)>>5;        b = (rgb&0xF800)>>11;        dst[2*i] = (b&0x1F) | ((g&0x3F)<<5) | ((r&0x1F)<<11);    }}void rgb16tobgr15(const uint8_t *src, uint8_t *dst, long src_size){    long i;    long num_pixels = src_size >> 1;    for (i=0; i<num_pixels; i++)    {        unsigned b,g,r;        register uint16_t rgb;        rgb = src[2*i];        r = rgb&0x1F;        g = (rgb&0x7E0)>>5;        b = (rgb&0xF800)>>11;        dst[2*i] = (b&0x1F) | ((g&0x1F)<<5) | ((r&0x1F)<<10);    }}void rgb15tobgr32(const uint8_t *src, uint8_t *dst, long src_size){    const uint16_t *end;    uint8_t *d = dst;    const uint16_t *s = (const uint16_t *)src;    end = s + src_size/2;    while (s < end)    {        register uint16_t bgr;        bgr = *s++;        #ifdef WORDS_BIGENDIAN            *d++ = 0;            *d++ = (bgr&0x1F)<<3;            *d++ = (bgr&0x3E0)>>2;            *d++ = (bgr&0x7C00)>>7;        #else            *d++ = (bgr&0x7C00)>>7;            *d++ = (bgr&0x3E0)>>2;            *d++ = (bgr&0x1F)<<3;            *d++ = 0;        #endif    }}void rgb15tobgr24(const uint8_t *src, uint8_t *dst, long src_size){    const uint16_t *end;    uint8_t *d = dst;    const uint16_t *s = (const uint16_t *)src;    end = s + src_size/2;    while (s < end)    {        register uint16_t bgr;        bgr = *s++;        *d++ = (bgr&0x7C00)>>7;        *d++ = (bgr&0x3E0)>>2;        *d++ = (bgr&0x1F)<<3;    }}void rgb15tobgr16(const uint8_t *src, uint8_t *dst, long src_size){    long i;    long num_pixels = src_size >> 1;    for (i=0; i<num_pixels; i++)    {        unsigned b,g,r;        register uint16_t rgb;        rgb = src[2*i];        r = rgb&0x1F;        g = (rgb&0x3E0)>>5;        b = (rgb&0x7C00)>>10;        dst[2*i] = (b&0x1F) | ((g&0x3F)<<5) | ((r&0x1F)<<11);    }}void rgb15tobgr15(const uint8_t *src, uint8_t *dst, long src_size){    long i;    long num_pixels = src_size >> 1;    for (i=0; i<num_pixels; i++)    {        unsigned b,g,r;        register uint16_t rgb;        rgb = src[2*i];        r = rgb&0x1F;        g = (rgb&0x3E0)>>5;        b = (rgb&0x7C00)>>10;        dst[2*i] = (b&0x1F) | ((g&0x1F)<<5) | ((r&0x1F)<<10);    }}void rgb8tobgr8(const uint8_t *src, uint8_t *dst, long src_size){    long i;    long num_pixels = src_size;    for (i=0; i<num_pixels; i++)    {        unsigned b,g,r;        register uint8_t rgb;        rgb = src[i];        r = (rgb&0x07);        g = (rgb&0x38)>>3;        b = (rgb&0xC0)>>6;        dst[i] = ((b<<1)&0x07) | ((g&0x07)<<3) | ((r&0x03)<<6);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -