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]; 就會釋放內存了.