美文网首页
关于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