關(guān)于GPUImage的使用

GPUImage 使用組合濾鏡時直接使用 GPUImageFilterPipeline類來做組合濾鏡. 使用組合濾鏡的優(yōu)勢在于只會有一張圖片內(nèi)存的占用。如果一個一個做,?? ?等著被用戶查水表吧. 內(nèi)存真的會爆.

我拿一個調(diào)整飽和度和對比度的組合濾鏡來做介紹 ,使用方式如下:

初始化 圖片

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

創(chuàng)建組合濾鏡 :與單一創(chuàng)建濾鏡沒有任何不同,只是把創(chuàng)建的所有的濾鏡對象存在下方數(shù)組,然后GPUImageFilterPipeline就會根據(jù)數(shù)組中對象做對應(yīng)的濾鏡操作

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

GPUImageContrastFilter*contrastfilter = [[GPUImageContrastFilteralloc]init];

saturationfilter1.saturation=0; ?參數(shù)自己調(diào)

contrastfilter.contrast=1.4;

NSMutableArray *filterArray =[NSMutableArray array];

[filterArray addObject:saturationfilter];?

[filterArray addObject:contrastfilter];

做組合濾鏡的關(guān)鍵類GPUImageFilterPipeline 關(guān)于output 為GPUImageView(圖片渲染后的顯示容器) 如果你的UIImageView 對象已經(jīng)創(chuàng)建好了 那么直接置為nil就好,如果你想直接使用GPUImageView? 那么直接創(chuàng)建一個GPUImageView的對象就好 圖片也會直接顯示在GPUImageView的對象上

input為被渲染的輸入源,一般為GPUImagePicture/VodioCamera對象 ? ? ?output為輸出源上方已經(jīng)介紹? ? filters為濾鏡數(shù)組

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

渲染圖片

[staticPicture processImage];

[contrastfilter useNextFrameForImageCapture];

獲取圖片

UIImage *filterImage = [filterPipeline currentFilteredFrame]

//最后最后 ? ?最重要的 ?: GPUImageView不會自動釋放 (ARC)

獲取到圖片后執(zhí)行:

[[GPUImageContext sharedImageProcessingContext].framebufferCache purgeAllUnassignedFramebuffers]; 就會釋放內(nèi)存了.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容