【转】YUV420P的格式以及转换为RGB565的代码(Android摄像头的输出一般为YUV420P)
2016-01-12 18:48
741 查看
http://blog.csdn.net/daisyhd/article/details/38866809
![](http://hi.csdn.net/attachment/201105/19/0_13057706044W7f.gif)
static void cvt_420p_to_rgb565(int width, int height, const unsigned char *src, unsigned short *dst)
{
int line, col, linewidth;
int y, u, v, yy, vr, ug, vg, ub;
int r, g, b;
const unsigned char *py, *pu, *pv;
linewidth = width >> 1;
py = src;
pu = py + (width * height);
pv = pu + (width * height) / 4;
y = *py++;
yy = y << 8;
u = *pu - 128;
ug = 88 * u;
ub = 454 * u;
v = *pv - 128;
vg = 183 * v;
vr = 359 * v;
for (line = 0; line < height; line++) {
for (col = 0; col < width; col++) {
r = (yy + vr) >> 8;
g = (yy - ug - vg) >> 8;
b = (yy + ub ) >> 8;
if (r < 0) r = 0;
if (r > 255) r = 255;
if (g < 0) g = 0;
if (g > 255) g = 255;
if (b < 0) b = 0;
if (b > 255) b = 255;
*dst++ = (((unsigned short)r>>3)<<11) | (((unsigned short)g>>2)<<5) | (((unsigned short)b>>3)<<0);
y = *py++;
yy = y << 8;
if (col & 1) {
pu++;
pv++;
u = *pu - 128;
ug = 88 * u;
ub = 454 * u;
v = *pv - 128;
vg = 183 * v;
vr = 359 * v;
}
}
if ((line & 1) == 0) {
pu -= linewidth;
pv -= linewidth;
}
}
}
![](http://hi.csdn.net/attachment/201105/19/0_13057706044W7f.gif)
static void cvt_420p_to_rgb565(int width, int height, const unsigned char *src, unsigned short *dst)
{
int line, col, linewidth;
int y, u, v, yy, vr, ug, vg, ub;
int r, g, b;
const unsigned char *py, *pu, *pv;
linewidth = width >> 1;
py = src;
pu = py + (width * height);
pv = pu + (width * height) / 4;
y = *py++;
yy = y << 8;
u = *pu - 128;
ug = 88 * u;
ub = 454 * u;
v = *pv - 128;
vg = 183 * v;
vr = 359 * v;
for (line = 0; line < height; line++) {
for (col = 0; col < width; col++) {
r = (yy + vr) >> 8;
g = (yy - ug - vg) >> 8;
b = (yy + ub ) >> 8;
if (r < 0) r = 0;
if (r > 255) r = 255;
if (g < 0) g = 0;
if (g > 255) g = 255;
if (b < 0) b = 0;
if (b > 255) b = 255;
*dst++ = (((unsigned short)r>>3)<<11) | (((unsigned short)g>>2)<<5) | (((unsigned short)b>>3)<<0);
y = *py++;
yy = y << 8;
if (col & 1) {
pu++;
pv++;
u = *pu - 128;
ug = 88 * u;
ub = 454 * u;
v = *pv - 128;
vg = 183 * v;
vr = 359 * v;
}
}
if ((line & 1) == 0) {
pu -= linewidth;
pv -= linewidth;
}
}
}
相关文章推荐
- Android FTP 上传下传文件
- android 6.0 and sdk23, when used xx.so has text relocations.
- Android - 通过Intent启动Activity
- Android Studio分享项目到GitHub
- android5.1 编译命令
- Android存储访问及目录
- 【转】Android仿QQ截图应用测试
- Android MVP 学习
- Android系统信息与安全
- 【转】[Android编程心得] Camera(OpenCV)自动对焦和触摸对焦的实现
- 【常用工具类】Material Design 调色盘
- 如何将SDK中的ApiDemos导入android手机中
- android6.0 ble scan android6.0蓝牙扫描
- android给listview的item设定高度
- Android学习笔记-在5.0之前的系统使用Metail Design 的设计风格
- android5.1 MT6735 编译过程
- android studio导入so文件最正确的方法
- 美团Android自动化之旅—适配渠道包
- Android调用适当程序打开文件的万能方法
- Android Studio 获取SHA1 的值