如何创建从当前图形上下文一个UIImage?(How to create a UIImage fro

2019-06-25 15:17发布

我想创建从当前图形上下文UIImage对象。 更具体而言,我的使用情况是,用户可以在画线的图。 他们可能会逐渐得出。 他们这样做,我想创建一个UIImage,代表他们的图纸。

这里是什么的drawRect:看起来像我现在:

- (void)drawRect:(CGRect)rect
{
CGContextRef c = UIGraphicsGetCurrentContext();

CGContextSaveGState(c);
CGContextSetStrokeColorWithColor(c, [UIColor blackColor].CGColor);
CGContextSetLineWidth(c,1.5f);

for(CFIndex i = 0; i < CFArrayGetCount(_pathArray); i++)
{
    CGPathRef path = CFArrayGetValueAtIndex(_pathArray, i);
    CGContextAddPath(c, path);
}

CGContextStrokePath(c);

CGContextRestoreGState(c);
}

...其中_pathArray的类型是CFArrayRef的,并填充每touchesEnded时间:被调用。 还要注意的是的drawRect:可以被调用几次,当用户拉近。

当用户完成后,我想创建一个代表图形上下文一个UIImage对象。 任何建议如何做到这一点?

Answer 1:

您需要安装图形上下文第一:

UIGraphicsBeginImageContext(myView.bounds.size);
[myView.layer renderInContext:UIGraphicsGetCurrentContext()];
viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();


Answer 2:

的UIImage *图像= UIGraphicsGetImageFromCurrentImageContext();

如果你需要保持image周围,一定要保持它!

编辑:如果你想的drawRect的输出保存到的图像,只用创建位图背景UIGraphicsBeginImageContext ,并结合新的情况下调用你的drawRect功能。 这比节约你使用中的drawRect工作CGContextRef容易做到 - 因为这方面可能没有与之相关联的位图信息。

UIGraphicsBeginImageContext(view.bounds.size);
[view drawRect: [myView bounds]];
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

您也可以使用开尔文提到的方法。 如果你想从像UIWebView的一个更复杂的视图中创建的图像,他的方法是更快。 绘制视图的层不需要刷新层,它只是需要从一个缓冲的运动图像数据到另一个!



Answer 3:

斯威夫特版本

    func createImage(from view: UIView) -> UIImage {
        UIGraphicsBeginImageContext(view.bounds.size)
        view.layer.renderInContext(UIGraphicsGetCurrentContext()!)
        let viewImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return viewImage
    }


文章来源: How to create a UIImage from the current graphics context?