kiran
kiran

Reputation: 4409

UIGraphicsGetCurrentContext value pass to CGContextRef is not working?

CGContextRef currentContext = UIGraphicsGetCurrentContext();
UIGraphicsBeginImageContext(drawImage.frame.size);
[drawImage.image drawInRect:CGRectMake(0,0, drawImage.frame.size.width, drawImage.frame.size.height)];

CGContextSetRGBStrokeColor(currentContext, 0.0, 0.0, 0.0, 1.0);
UIBezierPath *path=[self pathFromPoint:currentPoint 
                               toPoint:currentPoint];

CGContextBeginPath(currentContext);
CGContextAddPath(currentContext, path.CGPath);
CGContextDrawPath(currentContext, kCGPathFill);
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();

In the above code CGContextRef currentContext created of UIGraphicsGetCurrentContext() and pass it to CGContextBeginPath CGContextAddPath CGContextDrawPath currentContext has parameter to them its not working for me! When i am doing touchMovie.

When i pass directly UIGraphicsGetCurrentContext() in place of currentContext its working for me. I want to know why its like that?

@All Please Advice me for this issue.

Upvotes: 5

Views: 5857

Answers (2)

sch
sch

Reputation: 27506

The problem is that currentContext is no longer the current context after you start an image context:

CGContextRef currentContext = UIGraphicsGetCurrentContext();
UIGraphicsBeginImageContext(drawImage.frame.size);
// Now the image context is the new current context.

So you should invert these two lines:

UIGraphicsBeginImageContext(drawImage.frame.size);
CGContextRef currentContext = UIGraphicsGetCurrentContext();

Edit

As Nicolas has noted, you should end the image context when you no longer need it:

drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); // Add this line.

Edit

Also notice that you are setting a stroke color but drawing with the fill command.

So you should call the appropriate color method instead:

CGContextSetRGBFillColor(currentContext, 0.0, 1.0, 0.0, 1.0);

Upvotes: 7

Thomas Deniau
Thomas Deniau

Reputation: 2573

UIGraphicsBeginImageContext creates a new context and sets it at the current context. So you should do

CGContextRef currentContext = UIGraphicsGetCurrentContext();

after UIGraphicsBeginImageContext. Otherwise, you fetch a context, and this context is immediately superseded by UIGraphicsBeginImageContext.

Upvotes: 1

Related Questions