creating and drawing on a new UIImage

February 23, 2009

Someone asked me how to create a new image and draw another UIImage on it. Here’s the public answer, so everyone can benefit ;)

You can make a new image with using core graphics, but there is group of higher level functions in UIKit that are a lot easier to use. For more information please check out the UIKit Function Reference section in the iPhone SDK docs.

This snippet creates a new image context, draws the input image on it and converts the image context to a UIImage. Note that the maximum size of the new image is 1024×1024 due to graphics limitations of the iPhone.

	CGFloat width, height;		// max 1024 due to Core Graphics limitations
	UIImage *inputImage;		// input image to be composited over new image as example
 
	// create a new bitmap image context
	//
	UIGraphicsBeginImageContext(CGSizeMake(width, height));		
 
	// get context
	//
	CGContextRef context = UIGraphicsGetCurrentContext();		
 
	// push context to make it current 
	// (need to do this manually because we are not drawing in a UIView)
	//
	UIGraphicsPushContext(context);								
 
	// drawing code comes here- look at CGContext reference
	// for available operations
	//
	// this example draws the inputImage into the context
	//
	[inputImage drawInRect:CGRectMake(0, 0, width, height)];
 
 
	// pop context 
	//
	UIGraphicsPopContext();								
 
	// get a UIImage from the image context- enjoy!!!
	//
	UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
 
	// clean up drawing environment
	//
	UIGraphicsEndImageContext();

3 Responses to “creating and drawing on a new UIImage”

  1. How do you overcome the 1024×1024 limit?

  2. Core Graphics imposes the 1024×1024 limit. Even apps like ColorSplash have the 1024 limit.
    I guess you could tile multiple pieces together, but you won’t be able to use the graphics card accelerated context for that.

  3. This is extremely slow and takes *awful* amount of memory, being runned on, i. e., 25 fps. Is there another way?

Leave a Reply