【发布时间】:2012-07-27 08:07:31
【问题描述】:
我使用Accelerate.framework中的vImageConvert_RGB888toPlanar8和vImageConvert_Planar8toRGB888将RGB24转换为BGR24,但是当需要转换的数据很大时,比如3M或4M,需要花费的时间大约是10ms。所以有人知道一些足够快的想法吗?我的代码是这样的:
- (void)transformRGBToBGR:(const UInt8 *)pict{
rgb.data = (void *)pict;
vImage_Error error = vImageConvert_RGB888toPlanar8(&rgb,&red,&green,&blue,kvImageNoFlags);
if (error != kvImageNoError) {
NSLog(@"vImageConvert_RGB888toARGB8888 error");
}
error = vImageConvert_Planar8toRGB888(&blue,&green,&red,&bgr,kvImageNoFlags);
if (error != kvImageNoError) {
NSLog(@"vImagePermuteChannels_ARGB8888 error");
}
free((void *)pict);
}
【问题讨论】:
-
当我看到你的标题时,我立刻想到了Accelerator.framework。但是当你使用它时,我认为在 iOS 上没有更好的方法来做这样的事情。
-
@iGranDav:以 OP 的方式使用此框架并不能保证高速。数据复制太多。请参阅我的回答,有详细的解释和指向 ARM 网站的链接来完成这个确切的任务。
-
@iGranDav 这个 plane8 调用是完全错误的。如果你想交换字节,你应该使用 permute。
标签: ios assembly rgb neon accelerate-framework