目前iOS設備 GPU處理的矩陣最大為4096*4096 ,超過這么大的尺寸GPU渲染,則會失敗,函數CVOpenGLESTextureCacheCreateTextureFromImage就可能報6683。
解決辦法
使用GPUImagePicture的outputImageSize輸出尺寸,作為濾鏡的渲染尺寸。
[_sepiaFilter forceProcessingAtSize:outputImgSize];
因為GPUImagePicture的outputImageSize會對圖片尺寸按4096*4096的最大尺寸等比進行縮放。
代碼如下:
// 原圖
UIImage *inputImage = [UIImage imageNamed:@"ii360"];
// 生成GPUImagePicture
_sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];
// 隨便用一個濾鏡
_sepiaFilter = [[GPUImageGammaFilter alloc] init];
// 如果要顯示話,得創(chuàng)建一個GPUImageView來進行顯示
GPUImageView * imageView = [[GPUImageView alloc] initWithFrame:self.view.bounds];
//指定渲言尺寸
// [_sepiaFilter forceProcessingAtSize:inputImage.size];
///這里使用輸出size, 是為了避免當尺寸超過最大值時,使用縮放后的尺寸。
CGSize outputImgSize = _sourcePicture.outputImageSize;
[_sepiaFilter forceProcessingAtSize:outputImgSize];
// 個人理解,這個add其實就是把_sourcePicture給_sepiaFilter來處理
[_sourcePicture addTarget:_sepiaFilter];
// 用這個imageView來顯示_sepiaFilter處理的效果
[_sepiaFilter addTarget:imageView];
// 開始!
[_sourcePicture processImage];
盜用了某個朋友的demo:https://gitee.com/dosedo/GPUImageDemo