|
|
1.1 ! root 1: /* ! 2: Hatari - pixel_convert.h ! 3: ! 4: Functions to convert pixels from different bit depths to 24 bits RGB or BGR. ! 5: Used to save png screenshot and to record avi. ! 6: ! 7: This file is distributed under the GNU Public License, version 2 or at your ! 8: option any later version. Read the file gpl.txt for details. ! 9: */ ! 10: ! 11: ! 12: /*----------------------------------------------------------------------*/ ! 13: /* Convert pixels to 24-bit RGB (3 bytes per pixel) */ ! 14: /*----------------------------------------------------------------------*/ ! 15: ! 16: /** ! 17: * Unpack 8-bit data with RGB palette to 24-bit RGB pixels ! 18: */ ! 19: static inline void PixelConvert_8to24Bits(Uint8 *dst, Uint8 *src, int w, SDL_Color *colors) ! 20: { ! 21: int x; ! 22: for (x = 0; x < w; x++, src++) { ! 23: *dst++ = colors[*src].r; ! 24: *dst++ = colors[*src].g; ! 25: *dst++ = colors[*src].b; ! 26: } ! 27: } ! 28: ! 29: /** ! 30: * Unpack 16-bit RGB pixels to 24-bit RGB pixels ! 31: */ ! 32: static inline void PixelConvert_16to24Bits(Uint8 *dst, Uint16 *src, int w, SDL_PixelFormat *fmt) ! 33: { ! 34: int x; ! 35: for (x = 0; x < w; x++, src++) { ! 36: *dst++ = (((*src & fmt->Rmask) >> fmt->Rshift) << fmt->Rloss); ! 37: *dst++ = (((*src & fmt->Gmask) >> fmt->Gshift) << fmt->Gloss); ! 38: *dst++ = (((*src & fmt->Bmask) >> fmt->Bshift) << fmt->Bloss); ! 39: } ! 40: } ! 41: ! 42: /** ! 43: * unpack 32-bit RGBA pixels to 24-bit RGB pixels ! 44: */ ! 45: static inline void PixelConvert_32to24Bits(Uint8 *dst, Uint32 *src, int w, SDL_PixelFormat *fmt) ! 46: { ! 47: int x; ! 48: for (x = 0; x < w; x++, src++) ! 49: { ! 50: *dst++ = (((*src & fmt->Rmask) >> fmt->Rshift) << fmt->Rloss); ! 51: *dst++ = (((*src & fmt->Gmask) >> fmt->Gshift) << fmt->Gloss); ! 52: *dst++ = (((*src & fmt->Bmask) >> fmt->Bshift) << fmt->Bloss); ! 53: } ! 54: } ! 55: ! 56: ! 57: ! 58: /*----------------------------------------------------------------------*/ ! 59: /* Convert pixels to 24-bit BGR (3 bytes per pixel, used in BMP format) */ ! 60: /*----------------------------------------------------------------------*/ ! 61: ! 62: /** ! 63: * Unpack 8-bit data with RGB palette to 24-bit BGR pixels ! 64: */ ! 65: static inline void PixelConvert_8to24Bits_BGR(Uint8 *dst, Uint8 *src, int w, SDL_Color *colors) ! 66: { ! 67: int x; ! 68: for (x = 0; x < w; x++, src++) { ! 69: *dst++ = colors[*src].b; ! 70: *dst++ = colors[*src].g; ! 71: *dst++ = colors[*src].r; ! 72: } ! 73: } ! 74: ! 75: /** ! 76: * Unpack 16-bit RGB pixels to 24-bit BGR pixels ! 77: */ ! 78: static inline void PixelConvert_16to24Bits_BGR(Uint8 *dst, Uint16 *src, int w, SDL_PixelFormat *fmt) ! 79: { ! 80: int x; ! 81: for (x = 0; x < w; x++, src++) { ! 82: *dst++ = (((*src & fmt->Bmask) >> fmt->Bshift) << fmt->Bloss); ! 83: *dst++ = (((*src & fmt->Gmask) >> fmt->Gshift) << fmt->Gloss); ! 84: *dst++ = (((*src & fmt->Rmask) >> fmt->Rshift) << fmt->Rloss); ! 85: } ! 86: } ! 87: ! 88: /** ! 89: * unpack 24-bit RGB pixels to 24-bit BGR pixels ! 90: */ ! 91: static inline void PixelConvert_24to24Bits_BGR(Uint8 *dst, Uint8 *src, int w) ! 92: { ! 93: int x; ! 94: for (x = 0; x < w; x++, src += 3) { ! 95: #if SDL_BYTEORDER == SDL_BIG_ENDIAN ! 96: *dst++ = src[2]; /* B */ ! 97: *dst++ = src[1]; /* G */ ! 98: *dst++ = src[0]; /* R */ ! 99: #else ! 100: *dst++ = src[0]; /* B */ ! 101: *dst++ = src[1]; /* G */ ! 102: *dst++ = src[2]; /* R */ ! 103: #endif ! 104: } ! 105: } ! 106: ! 107: /** ! 108: * unpack 32-bit RGBA pixels to 24-bit BGR pixels ! 109: */ ! 110: static inline void PixelConvert_32to24Bits_BGR(Uint8 *dst, Uint32 *src, int w, SDL_PixelFormat *fmt) ! 111: { ! 112: int x; ! 113: for (x = 0; x < w; x++, src++) ! 114: { ! 115: *dst++ = (((*src & fmt->Bmask) >> fmt->Bshift) << fmt->Bloss); ! 116: *dst++ = (((*src & fmt->Gmask) >> fmt->Gshift) << fmt->Gloss); ! 117: *dst++ = (((*src & fmt->Rmask) >> fmt->Rshift) << fmt->Rloss); ! 118: } ! 119: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.