美文网首页
关于GPUImage的使用

关于GPUImage的使用

作者: SapientiaWind | 来源:发表于2016-12-01 17:28 被阅读314次

    GPUImage 使用组合滤镜时直接使用 GPUImageFilterPipeline类来做组合滤镜. 使用组合滤镜的优势在于只会有一张图片内存的占用。如果一个一个做,🙄  等着被用户查水表吧. 内存真的会爆.

    我拿一个调整饱和度和对比度的组合滤镜来做介绍 ,使用方式如下:

    初始化 图片

    GPUImagePicture *staticPicture = [[GPUImagePicture alloc]initWithImage:chooseImage smoothlyScaleOutput:YES];

    创建组合滤镜 :与单一创建滤镜没有任何不同,只是把创建的所有的滤镜对象存在下方数组,然后GPUImageFilterPipeline就会根据数组中对象做对应的滤镜操作

    GPUImageSaturationFilter*saturationfilter = [[GPUImageSaturationFilter alloc]init];

    GPUImageContrastFilter*contrastfilter = [[GPUImageContrastFilteralloc]init];

    saturationfilter1.saturation=0;  参数自己调

    contrastfilter.contrast=1.4;

    NSMutableArray *filterArray =[NSMutableArray array];

    [filterArray addObject:saturationfilter]; 

    [filterArray addObject:contrastfilter];

    做组合滤镜的关键类GPUImageFilterPipeline 关于output 为GPUImageView(图片渲染后的显示容器) 如果你的UIImageView 对象已经创建好了 那么直接置为nil就好,如果你想直接使用GPUImageView  那么直接创建一个GPUImageView的对象就好 图片也会直接显示在GPUImageView的对象上

    input为被渲染的输入源,一般为GPUImagePicture/VodioCamera对象      output为输出源上方已经介绍    filters为滤镜数组

    GPUImageFilterPipeline *filterPipeline = [[GPUImageFilterPipeline alloc ]initWithOrderedFilters:filterArray input:staticPictureoutput:nil];

    渲染图片

    [staticPicture processImage];

    [contrastfilter useNextFrameForImageCapture];

    获取图片

    UIImage *filterImage = [filterPipeline currentFilteredFrame]

    //最后最后    最重要的  : GPUImageView不会自动释放 (ARC)

    获取到图片后执行:

    [[GPUImageContext sharedImageProcessingContext].framebufferCache purgeAllUnassignedFramebuffers]; 就会释放内存了.

    相关文章

      网友评论

          本文标题:关于GPUImage的使用

          本文链接:https://www.haomeiwen.com/subject/draxmttx.html