美文网首页
解决iOS GPUImage滤镜 大图问题 CVOpenGLE

解决iOS GPUImage滤镜 大图问题 CVOpenGLE

作者: 生命不止运动不息 | 来源:发表于2021-04-15 22:00 被阅读0次

    目前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];
        
        // 如果要显示话,得创建一个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

    相关文章

      网友评论

          本文标题:解决iOS GPUImage滤镜 大图问题 CVOpenGLE

          本文链接:https://www.haomeiwen.com/subject/yvbjlltx.html