首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格式转换

格式转换
EN

Stack Overflow用户
提问于 2012-06-27 14:49:36
回答 2查看 3.4K关注 0票数 2

在OpenGL ES 2.0中,读取帧缓冲区并将其转换为RGBA帧。我想把它转换成YUV格式。

我试过使用这个table。忽略阿尔法分量。当我这样做的时候,看到YUV框架产生了它的扭曲。

有人能帮帮我吗?

代码语言:javascript
复制
yuvdata[i * j *1]= (0.257)*memory[i*j*1] + (0.504)*memory[i*j*2]+(0.098)*memory[i*j*3]+16;
yuvdata[i * j *3]= (0.439)*memory[i*j*1] - (0.368)*memory[i*j*2] -(0.071)*memory[i*j*3]+128;
yuvdata[i * j *2]= -(0.148)*memory[i*j*1] - (0.291)*memory[i*j*2] +(0.439)*memory[i*j*3]+128;

`

规范化无助于内存存储rgba,yuv是存储yuv的空闲空间

我使用了忽略alpha分量的rgb到yuv的转换

朋友们,这个问题解决了。这篇文章太棒了,yuv2rgb。感谢Viktor Latypov和MārtiņšMožeiko

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-27 16:26:53

"YUV“不是一个完整的格式。

this wikipedia article你可以得到YUV411,YUV422,YUV420p到YUV444的转换。将这些变换的逆变换与您的RGB转换相结合,您将得到结果。

您缺少的是:一个RGB三元组可能会以这种方式生成多个(而不是一个) YUV组件。

  1. YUV444每像素3字节
  2. YUV422每2像素4字节
  3. YUV411每4像素6字节
  4. YUV420p每4像素6字节,重新排序代码<

>G210

首先,YUV422

Y'UV422到RGB888的转换

输入:读取4字节的Y‘’UV (u,y1,v,y2 )

输出:写入6字节的RGB (R,G,B,R,G,B)

然后是YUV4111

Y'UV411到RGB888的转换

输入:读取6字节的Y‘’UV

输出:写入12字节的RGB

代码语言:javascript
复制
// Extract YUV components
u  = yuv[0];
y1 = yuv[1];
y2 = yuv[2];
v  = yuv[3];
y3 = yuv[4];
y4 = yuv[5];
rgb1 = Y'UV444toRGB888(y1, u, v);
rgb2 = Y'UV444toRGB888(y2, u, v);
rgb3 = Y'UV444toRGB888(y3, u, v);
rgb4 = Y'UV444toRGB888(y4, u, v);

与420p类似,但YUV值分布在那里的矩形上-请参阅维基百科的图表和图像。

基本上,您应该获取4个RGB像素,将每个像素转换为YUV (希望使用有效的444转换器),然后以维基百科上所示的巧妙方式存储YUV4数组。

票数 1
EN

Stack Overflow用户

发布于 2012-06-27 16:05:15

你确定你正在正确地访问内存阵列吗?它不应该是这样的吗:

代码语言:javascript
复制
R=memory[(i*width + j)*4+0]
G=memory[(i*width + j)*4+1]
B=memory[(i*width + j)*4+3]

或者,如果您有BGRA,请将0替换为3。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11220806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档