首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将BGRA转换为ARGB

将BGRA转换为ARGB
EN

Stack Overflow用户
提问于 2012-05-18 22:52:50
回答 1查看 5.3K关注 0票数 4

我正在读取从iPhone摄像头获取像素数据的this tutorial

虽然我运行和使用这段代码没有问题,但我需要获取相机数据(以BGRA格式提供)的输出,并将其转换为ARGB,以便我可以将其与外部库一起使用。我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-19 03:31:17

如果您使用的是iOS 5.0,您可以在Accelerate框架中使用vImage,使用如下代码(取自苹果的WebCore source code)进行霓虹灯优化的颜色分量交换:

代码语言:javascript
复制
vImage_Buffer src;
src.height = height;
src.width = width;
src.rowBytes = srcBytesPerRow;
src.data = srcRows;

vImage_Buffer dest;
dest.height = height;
dest.width = width;
dest.rowBytes = destBytesPerRow;
dest.data = destRows;

// Swap pixel channels from BGRA to RGBA.
const uint8_t map[4] = { 2, 1, 0, 3 };
vImagePermuteChannels_ARGB8888(&src, &dest, map, kvImageNoFlags);

其中,widthheightsrcBytesPerRow是通过CVPixelBufferGetWidth()CVPixelBufferGetHeight()CVPixelBufferGetBytesPerRow()从像素缓冲区获取的。RGBA将是指向像素缓冲区中字节的基地址的指针,而destRows将是为保存输出srcRows图像而分配的内存。

这应该比简单地迭代字节和交换颜色分量要快得多。

根据图像大小的不同,更快的解决方案是将帧上载到OpenGL ES,渲染一个简单的矩形并将其作为纹理,然后使用glReadPixels()下拉RGBA值。更好的办法是使用iOS 5.0的纹理缓存进行上传和下载,在iPhone 4上,720p的帧只需要1-3毫秒。当然,使用OpenGL ES意味着更多的支持代码来实现这一点。

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

https://stackoverflow.com/questions/10654909

复制
相关文章

相似问题

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