關于GPUImage的使用

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容