vDSP加速的应用

本文介绍如何在iOS开发中使用vDSP库来优化图片叠加算法。通过将原始算法转换为利用vDSP函数的形式,可以实现显著的性能提升。但需要注意的是,vDSP适用于需要大量重复计算的场景。

vDSP 是IOS提供一系列加速处理算法。。在优化时可以考虑应用一二。。。

1、在项目中加入Accelerate.framework库

  点开项目属性->Build Phases->Link Binary With Libraries->+ Accelerate.framework;

2、在应用的类头文件加上引用

#include <Accelerate/Accelerate.h>

3、查找对应函数应用

   所有函数可以在该文档查找 vDSP Reference.

   以下通过对图片的叠加算法进行测试.... 

//无vDSP叠加算法
void NormalEx( BYTE *InputPtr, BYTE *CompositePtr, floatrat,int width,int height)
{
    for(int j=0;j<height;j++)
    {
        for(int i=0;i<width;i++)
        {
          InputPtr[BLUE] =    (1 - rat) * InputPtr[BLUE] + rat * CompositePtr[BLUE];
          InputPtr[GREEN] = (1 - rat) * InputPtr[GREEN] + rat * CompositePtr[GREEN];
          InputPtr[RED] = (1 - rat) * InputPtr[RED] + rat * CompositePtr[RED];
            InputPtr+=4;
            CompositePtr+=4;
        } 
}
//应用vDSP叠加算法 void NormalEx( BYTE *InputPtr, BYTE *CompositePtr, float rat,int width,int height) { int count=width*height; // alloc space for our dsp arrays float * srcAsFloat = (float*)malloc(count*sizeof(float)); float * comAsFloat = (float*)malloc(count*sizeof(float)); float inrat=1 - rat; for (int i=1; i<4; i++) { //转成float数组 vDSP_vfltu8(InputPtr+i,4,srcAsFloat,1,count); vDSP_vfltu8(CompositePtr+i,4,comAsFloat,1,count); //乘法 vDSP_vsmul(srcAsFloat, 1, &inrat, srcAsFloat, 1, count); vDSP_vsmul(comAsFloat, 1, &rat, comAsFloat, 1, count); //相加 vDSP_vadd(srcAsFloat, 1, comAsFloat, 1, srcAsFloat, 1, count); // 转回byte vDSP_vfixu8(srcAsFloat, 1, InputPtr+i, 4,count); } free(srcAsFloat); free(comAsFloat); }

4、总结

  vDSP在实际应用需要转化成float或者double型处理....对于简单的算法而已会更加耗时(如:灰度算法)

      实际应用在需要批量重复简单操作的算法中会有显著提速效果............

 

 

转载于:https://www.cnblogs.com/stratrail/p/3201109.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值