近期进行视频开发,用到了ffmpeg,视频处理中yuv格式是基础,输入输出必定会碰到。
yuv转rgb算法代码很多,但是反过来的很少,这里提供一个rgb转yuv的,是c语言代码,但可以轻松改为其他语言,如c#,java
int rgb32_to_i420(int width, int height, const char * src,
char * dst)
{
unsigned char * dst_y_even;
unsigned char * dst_y_odd;
unsigned char * dst_u;
unsigned char * dst_v;
const unsigned char *src_even;
const unsigned char *src_odd;
int i, j;
src_even = (const unsigned char *)src;
src_odd = src_even + width * 4;
// it's planar
dst_y_even = (unsigned char *) dst;
dst_y_odd = dst_y_even + width;
dst_u = dst_y_even + width * height;
dst_v = dst_u + ((width * height) >> 2);
// NB this doesn't work perfectly for u and v values of the
edges of the

这篇博客介绍了如何使用C语言代码将RGB32格式的图像转换为YUV420P(与I420格式相同),适用于Java和其他语言的开发者。文章详细展示了转换算法,并特别指出对于视频边缘的U和V值可能存在的不完美处理。
最低0.47元/天 解锁文章
格式&spm=1001.2101.3001.5002&articleId=114204844&d=1&t=3&u=a50f1fe0308846e78fe502ec997e84f5)
325

被折叠的 条评论
为什么被折叠?



