解決iOS GPUImage濾鏡 大圖問題 CVOpenGLESTextureCacheCreateTextureFromImage 6683

目前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

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

友情鏈接更多精彩內容