关于将手写板的内容输出(UIView输出UIImage)

PlatformThinking 2017-12-03

感谢大佬之前的文章让我改善了手写涂鸦的性能:

刚好我最近在写的项目有一个手写签名的需求,自己照着复现了下,但是有一个手写板的内容输出的需求,项目之前有个方法生成纯色图片:

 根据颜色生成纯色图片
 
 @param color 颜色
 @return 纯色图片
 */
+ (UIImage *)imageWithColor:(UIColor *)color {
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    //开启上下文
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);
    
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return image;
}

于是想用这个方法,直接将当前的手写板的内容输出:

- (UIImage*) imageWithUIView:(UIView*) view{
    // 创建一个bitmap的context
    // 并把它设置成为当前正在使用的context
    UIGraphicsBeginImageContext(view.bounds.size);
    CGContextRef currnetContext = UIGraphicsGetCurrentContext();
    [view.layer renderInContext:currnetContext];
    // 从当前context中创建一个改变大小后的图片
    UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
    // 使当前的context出堆栈
    UIGraphicsEndImageContext();
    return image;
}

发现这个func的输出会失真(测试机:IP7)后来找到了解决失真模糊的方法:

-(UIImage *)convertViewToImage:(UIView *)view{
    CGSize size = view.bounds.size;
    //第一个参数表示区域大小
    //第二个参数表示是否非透明的:半透明效果-NO
    //第三个参数表示屏幕密度
    UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

运行时输出的内存消耗(之前我以为会比较吃内存==嘤嘤嘤,但是发现内存几乎没有波动)。

关于将手写板的内容输出(UIView输出UIImage)

相关推荐