Mar 30
Recently there have been some interesting developer news related to working with images on the iPhone.
- First there is Chris Greening’s open source project simple-iphone-image-processing, that provides a set of common image processing tasks .
- Today I listened to the Mobile Orchard’s podcast Interview with Paul Cantrell, and the discussion was about UIKit, views, layers, etc. This was the most enlightening information I’ve come across on this topic ever. Highly recommended.
So, I thought I’d contribute a few UIImage routines that I’ve found useful.
Combine two UIImages
To add two UIImages together you need to make use of Graphics Context.
- (UIImage *)addImage:(UIImage *)image1 toImage:(UIImage *)image2 {
UIGraphicsBeginImageContext(image1.size);
// Draw image1
[image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];
// Draw image2
[image2 drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultingImage;
}
Create a UIImage from a part of another UIImage
This requires a round-trip to Core Graphics land:
- (UIImage *)imageFromImage:(UIImage *)image inRect:(CGRect)rect {
CGImageRef sourceImageRef = [image CGImage];
CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
return newImage;
}
Save UIImage to Photo Album
This is just a one-liner:
UIImageWriteToSavedPhotosAlbum(image, self, @selector(imageSavedToPhotosAlbum: didFinishSavingWithError: contextInfo:), context);
And to know if the save was successful:
- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
NSString *message;
NSString *title;
if (!error) {
title = NSLocalizedString(@"SaveSuccessTitle", @"");
message = NSLocalizedString(@"SaveSuccessMessage", @"");
} else {
title = NSLocalizedString(@"SaveFailedTitle", @"");
message = [error description];
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message:message
delegate:nil
cancelButtonTitle:NSLocalizedString(@"ButtonOK", @"")
otherButtonTitles:nil];
[alert show];
[alert release];
}
April 1st, 2009 at 13:03
Thanks for UIGraphicsBeginImageContext()! Somehow I’d never discovered it. Very useful indeed.
Glad you liked the podcast!
April 21st, 2009 at 19:10
Nice blog.. thanks for the info! What are you using to display the code snippets in your blog?
April 22nd, 2009 at 10:19
@Johnny: Thanks for the feedback! For displaying code snippets I’m using this WP plugin: Google Syntax Highlighter for WordPress which in turn is built upon this open source project: Google Syntax Highlighter.
April 23rd, 2009 at 07:28
Thanks for posting this. But you have any idea why if use UIGraphicsBeginImageContext it will not work unless I set the last 3 options to nil? If I use your code, it just crashes simulator.
April 24th, 2009 at 11:03
These are really good tricks. Can we draw a rectangle on the image and then display on screen? I have image on which I want to draw rectangle and then display on scree.
April 24th, 2009 at 18:12
@Vishal: Yes, you should be able to draw a rect in between UIGraphicsBeginImageContext() and UIGraphicsEndImageContext(). And then render the resulting image to the screen.
April 24th, 2009 at 18:16
@MPY: I’m not sure what you mean. UIGraphicsBeginImageContext only takes one parameter, a CGSize.
January 10th, 2010 at 20:27
how do you do image effects like blurring, bumping, and distortions/warping?
can you use Core Image Filters? If not, what else can you try? Thanks.
January 11th, 2010 at 07:48
@jeff: I have not developed any iPhone apps with that type of image effects, so I don’t know what the best way to do this is.
January 18th, 2010 at 06:40
thanks for providing source codes for simple image processing based on iPhone.
I have one question here , do you have try to use the opencv to iPhone ? I have searched that there are a lot people tried to compiler opencv based on iPhone, but never see one real application which use opencv to do image processing.
Thanks
January 18th, 2010 at 08:51
@Forrest: Sorry, I have not used opencv.
March 25th, 2010 at 05:26
@Nick,
actually if you can make full use of opencv based on iPhone, that will be wonderful !
Opencv is so powerful that you do not need to write any image processing algorithm. Just use them from OpenCV.
Welcome for discussing on this topic with me , my contact is :
SKYPE : forrest.shi
EMAIL : forrest.shi@gmail.com