Maulik
Maulik

Reputation: 19418

UIBezierPath : Make image of drawing only

I am creating an image from free hand drawing using below code :

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

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

I want to take image of only black lines (drawing) not the entire view's. View is size of 300x300. But if my drawing is in 50x50 then I want to focus on that part only.

I tried with

UIGraphicsBeginImageContext(signPath.bounds.size);

signPath is UIBezierPath object. But with this I am getting blank image.

Any suggestions ?

Upvotes: 1

Views: 81

Answers (1)

Maulik
Maulik

Reputation: 19418

ok I figured it out.

UIGraphicsBeginImageContext(signPath.bounds.size);

By this way I was creating image context's size only and origin was missing. So I need to create image context with x and y (origins).

I have origin in UIBezierPath with size.

Code :

    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();

I have given static values for some padding (given some space) while creating the image.

Not sure if this is the standard way, but it solved my problem and I am able to create image of hand drawing in a 500x500 view. Now I am getting image of the my free hand drawing (Strokes) not for the entire view.

Upvotes: 2

Related Questions