- //File : img.h
- //Author : Loonzhong <sepnic@gmail.com>
- #ifndef __IMG_H
- #define __IMG_H
- class img {
- public:
- img() {};
- ~img() {};
-
- void yuv_to_rgb16(unsigned char y, unsigned char u, unsigned char v, unsigned char *rgb);
- void yuv_to_rgb32(unsigned char y, unsigned char u, unsigned char v, unsigned char *rgb);
- private:
-
- };
- #endif /* __IMG_H */
- //File : img.cpp
- //Author : Loonzhong <sepnic@gmail.com>
- #include <stdlib.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <fcntl.h>
- #include <sys/ioctl.h>
- #include <string.h>
- #include <errno.h>
- #include "img.h"
- void img::yuv_to_rgb16(unsigned char y,
- unsigned char u,
- unsigned char v,
- unsigned char *rgb)
- {
- register int r, g, b;
- int rgb16;
- r = (1192 * (y - 16) + 1634 * (v - 128) ) >> 10;
- g = (1192 * (y - 16) - 833 * (v - 128) - 400 * (u -128) ) >> 10;
- b = (1192 * (y - 16) + 2066 * (u - 128) ) >> 10;
- r = r > 255 ? 255 : r < 0 ? 0 : r;
- g = g > 255 ? 255 : g < 0 ? 0 : g;
- b = b > 255 ? 255 : b < 0 ? 0 : b;
- rgb16 = (int)(((r >> 3)<<11) | ((g >> 2) << 5)| ((b >> 3) << 0));
- *(rgb++) = (unsigned char)(rgb16 & 0xFF);
- *(rgb++) = (unsigned char)((rgb16 & 0xFF00) >> 8);
- }
- void img::yuv_to_rgb32(unsigned char y,
- unsigned char u,
- unsigned char v,
- unsigned char *rgb)
- {
- register int r, g, b;
- r = (y + (359 * v)) >> 8;
- g = (y - (88 * u) - (183 * v)) >> 8;
- b = (y + (454 * u)) >> 8;
-
- b = (b > 255) ? 255 : ((b < 0) ? 0 : b);
- g = (g > 255) ? 255 : ((g < 0) ? 0 : g);
- r = (r > 255) ? 255 : ((r < 0) ? 0 : r);
-
- *(rgb++) = b;
- *(rgb++) = g;
- *(rgb++) = r;
- *(rgb++) = 0x0;
- }