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]; CGImageRelease(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]; }