UIBezierPath:仅绘制图形图像

时间:2018-05-11 13:08:09

标签: ios objective-c uiimage uibezierpath

我正在使用以下代码从自由手绘图创建图像:

UIGraphicsBeginImageContext(self.bounds.size);
for (UIBezierPath *path in self.pathArray) {
    [self.lineColor setStroke];
    [path stroke];
}

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

我想拍摄的只是黑线(绘图)而不是整个视图的图像。查看大小为300x300。但如果我的绘图是50x50,那么我只想专注于那部分。

我试过

UIGraphicsBeginImageContext(signPath.bounds.size);

signPathUIBezierPath个对象。但有了这个,我得到了空白的图像。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

好吧我明白了。

UIGraphicsBeginImageContext(signPath.bounds.size);

通过这种方式,我只创建了图像上下文的大小,并且缺少原点。 所以我需要用x and y (origins).

创建图像上下文

我来自UIBezierPath size.

代码:

    CGSize size = signPath.bounds.size;
    size = CGSizeMake(size.width + 10, size.height + 10);
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
    CGContextRef c = UIGraphicsGetCurrentContext();

    CGContextConcatCTM(c, CGAffineTransformMakeTranslation(-signPath.bounds.origin.x + 5, -signPath.bounds.origin.y + 5));
    [self.layer renderInContext:c];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

我在创建图像时为某些填充(给定一些空间)给出了静态值。

不确定这是否是标准方式,但它解决了我的问题,我能够在500x500视图中创建手绘图像。 现在我得到的是我的自由手绘图(Strokes)的图像,而不是整个视图。