700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > RGB格式学习:RGBx xRGB RGBA ARGB等格式转换成RGB

RGB格式学习:RGBx xRGB RGBA ARGB等格式转换成RGB

时间:2022-10-03 21:24:36

相关推荐

RGB格式学习:RGBx xRGB RGBA ARGB等格式转换成RGB

在使用gstreamer的过程中经常遇到各种类型的RGB格式图像。来看看各种格式有什么关系。RGB类型格式在内存中各个分量都是依次排序的。排序方式都是和命名方式的位置顺序是一致的,且各个分量都是占一个字节的大小。下面列出RGB的详细信息。

"RGB"

+--+--+--+ +--+--+--+|R0|G0|B0| |R1|G1|B1| ...+--+--+--+ +--+--+--+Component 0: Rdepth: 8pstride: 3offset:0Component 1: Gdepth: 8pstride: 3offset:1Component 2: Bdepth 8pstride: 3offset:2Imagedefault rstride: RU4 (width * 3)default size: rstride (image) * height

"BGR"则是反向RGB

+--+--+--+ +--+--+--+|B0|G0|R0| |B1|G1|R1| ...+--+--+--+ +--+--+--+

而RGBx和RGBA只是在RGB的形式上多了一个通道而已。A代表Alpha通道,主要用来表示图像叠加时的透明度选择。x代表在RGB基础增加一个通道用来存储其他信息。这两个分量在内存上都是比RGB多占用一个字节。

"BGRA"带有 Alpha 通道的 RGB

+--+--+--+--+ +--+--+--+--+|B0|G0|R0|A0| |B1|G1|R1|A1| ...+--+--+--+--+ +--+--+--+--+

"RGBx"sparse RGB packed into 32 bit, space last

+--+--+--+--+ +--+--+--+--+|R0|G0|B0|X | |R1|G1|B1|X | ...+--+--+--+--+ +--+--+--+--+

其他的ARGB或者BGRx格式都是大同小异,只是各分量排序方式不一样。

弄清楚了内存排序方式就很好实现转换格式了。下面给出GBRx转GBR示例代码。

void cvtColorGBRx2GBR(guint8 *rgb, const guint8 *src, int width, int height){for (int h = 0; h < height; h++){for (int w = 0, w1 = 0; w < width*3; w += 3, w1 += 4){rgb[w]= src[w1];rgb[w + 1] = src[w1+1];rgb[w + 2] = src[w1+2];}rgb += width*3;src += width*4;}return;}

转RGB的话只需要改变分量的位置就行了

rgb[w]= src[w1+2];rgb[w + 1] = src[w1+1];rgb[w + 2] = src[w1];

总体来说其实就是x或者A通道分量去掉重新组合成RGB。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。