views:

764

answers:

2

Hey everyone

I've got an iPhone app that allows a person to draw something on the screen with their finger. They draw with a white line on a black background. However, when I upload this image to the web server, the line itself is white. I have been trying to work through the core graphics libraries in search of a way to invert the colour of the drawn image. There is no background set so it should be transparent. Doing an image invert should swap the white to black.

Does anyone know if this is possible through the core graphics library?

Cheers

A: 

Yes. You should be able to do this in a CALayer by the calls to CGContext, or directly with a buffer on CGImage. There are other examples on how to go back and forth with save image from a UIView also on Stackoverflow.

David Sowsy
+2  A: 

I ended up finding a good way of doing it. Instead of simply making the background of the original image transparent, I make it black. Now there are white lines on a black background. Then it was simply a matter of doing:

UIGraphicsBeginImageContext(image.size);
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy);
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeDifference);
CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(),[UIColor whiteColor].CGColor);
CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, image.size.width, image.size.height));
UIImage *returnImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

The variable 'image' is the original image with white line on black background. Thanks for your help David Sowsy