zoukankan      html  css  js  c++  java
  • iOS 一步搞定图片渲染效果

    自定义一个简单类,需要时候调用即可,直接上代码

    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    
    @interface CIFilterEffect : NSObject
    
    - (instancetype)initWithImage:(UIImage *)image filterName:(NSString *)name;
    @property (nonatomic, strong) UIImage *result;
    
    @end
    

     ps:  这里设置的属性是给controller取值用,初始化方法传入的是uiimage对象和filter的特定字符串,这个name表示渲染效果

    - (instancetype)initWithImage:(UIImage *)image filterName:(NSString *)name
    {
        self = [super init];
        if (self)
        {
            // 将UIImage转换成CIImage
            CIImage *ciImage = [[CIImage alloc] initWithImage:image];
            // 创建滤镜
            CIFilter *filter = [CIFilter filterWithName:name
                                          keysAndValues:kCIInputImageKey, ciImage, nil];
            [filter setDefaults];
            // 获取绘制上下文
            CIContext *context = [CIContext contextWithOptions:nil];
            // 渲染并输出CIImage
            CIImage *outputImage = [filter outputImage];
            // 创建CGImage句柄
            CGImageRef cgImage = [context createCGImage:outputImage
                                               fromRect:[outputImage extent]];
            _result = [UIImage imageWithCGImage:cgImage];
            // 释放CGImage句柄
            CGImageRelease(cgImage);
        }
        return self;
    }
    

      ps:  这个是.m文件的实现部分,没有其他东西

    下面附一个简单效果,代码写在viewcontroller里面即可

    - (void)CIFilterEffect {
        UIImage *image = [[CIFilterEffect alloc] initWithImage:[UIImage imageNamed:@"image.jpg"] filterName:@"CISRGBToneCurveToLinear"].result;
        
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        [self.view addSubview:imageView];
    }
    

    ps :   - (void)CIFilterEffect 这个方法是我自定义的,在viewdidiload里面调用就可以了。非常的简单,如果完全照搬上面代码就可以实现渲染图片了。

    小结:  以上代码比较简单,自定义类里面的实现其实写的不是特别标准,逻辑上没问题,在苹果官方文档里上下文的创建是第一步 就这点差别吧。

       渲染并不是个难点,搞清楚个中逻辑就ok。

         还有别忘了,末尾的release,虽然省略不影响程序的运行,但是即使在arc下还是需要添加,因为实际上CI 是c方法,oc的计数并不能释放他的内存

  • 相关阅读:
    TP框架中模板赋值
    使用PHP和GZip压缩网站JS/CSS文件加速网站访问速度
    测试相关知识分享(百度和其他途径查找到的)
    测试基本概念
    shell编程之重定向
    shell编程之函数
    shell编程之循环
    shell编程之测试和判断
    shell编程之变量
    Linux系统学习之正则表达式
  • 原文地址:https://www.cnblogs.com/mdurant/p/5369152.html
Copyright © 2011-2022 走看看