# rgb2yuv **Repository Path**: Hz092811/rgb2yuv ## Basic Information - **Project Name**: rgb2yuv - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-11-17 - **Last Updated**: 2023-11-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # rgb2yuv #### 介绍 该demo介绍了rgb转yuv444和yuv222,yuv444和yuv222转rgb以及如何获取屏幕截图到rgb,支持跨平台编译运行 #### 软件架构 由cmake编译运行 #### 使用说明 ##### rgb转yuv444公式 ```c++ int yy = 0.299 * rInt + 0.587 * gInt + 0.114 * bInt; int u = -0.1684 * rInt - 0.3316 * gInt + 0.5 * bInt + 128; int v = 0.5 * rInt - 0.4187 * gInt - 0.0813 * bInt + 128; yy = (yy < 0) ? 0 : ((yy > 255) ? 255 : yy); u = (u < 0) ? 0 : ((u > 255) ? 255 : u); v = (v < 0) ? 0 : ((v > 255) ? 255 : v); ``` ##### rgb转yuv420公式 ```c++ int yy = 0.299 * rInt + 0.587 * gInt + 0.114 * bInt; int u = -0.1684 * rInt - 0.3316 * gInt + 0.5 * bInt + 128; int v = 0.5 * rInt - 0.4187 * gInt - 0.0813 * bInt + 128; yy = (yy < 0) ? 0 : ((yy > 255) ? 255 : yy); u = (u < 0) ? 0 : ((u > 255) ? 255 : u); v = (v < 0) ? 0 : ((v > 255) ? 255 : v); yData[index] = yy; if (y % 2 == 0 && x % 2 == 0) { uData[uvIndex] = u; vData[uvIndex] = v; } ``` ##### yuv转rgb公式 ```c++ int C = Y - 16; int D = U - 128; int E = V - 128; int R = (298 * C + 409 * E + 128) >> 8; int G = (298 * C - 100 * D - 208 * E + 128) >> 8; int B = (298 * C + 516 * D + 128) >> 8; R = (R < 0) ? 0 : ((R > 255) ? 255 : R); G = (G < 0) ? 0 : ((G > 255) ? 255 : G); B = (B < 0) ? 0 : ((B > 255) ? 255 : B); ```