Search code examples
iosobjective-cuiimageuibezierpath

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 ?


Solution

  • 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.