Dan*_*maa 4 core-graphics ios avcapturesession avcam
我正在阅读本教程,从iPhone相机获取像素数据.
虽然我没有运行和使用此代码的问题,但我需要获取相机数据的输出(在BGRA中)并将其转换为ARGB,以便我可以将其与外部库一起使用.我该怎么做呢?
Bra*_*son 19
如果您使用的是iOS 5.0,则可以使用Accelerate框架中的vImage,使用以下代码(从Apple的WebCore源代码中提取)执行NEON优化的颜色组件交换:
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);
Run Code Online (Sandbox Code Playgroud)
在那里width,height以及srcBytesPerRow通过从像素缓冲区获得CVPixelBufferGetWidth(),CVPixelBufferGetHeight()和CVPixelBufferGetBytesPerRow().srcRows将是指向像素缓冲区中字节的基址的指针,并且destRows是您分配用于保存输出RGBA图像的内存.
这应该比简单地迭代字节和交换颜色组件快得多.
根据图像大小,更快的解决方案是将帧上传到OpenGL ES,渲染一个简单的矩形,将其作为纹理,并使用glReadPixels()来下拉RGBA值.更好的方法是使用iOS 5.0的纹理缓存进行上传和下载,其中iPhone 4上的720p帧只需1-3毫秒.当然,使用OpenGL ES意味着需要提供更多支持代码这个关闭.
| 归档时间: |
|
| 查看次数: |
4649 次 |
| 最近记录: |