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();
How do you overcome the 1024×1024 limit?
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.
This is extremely slow and takes *awful* amount of memory, being runned on, i. e., 25 fps. Is there another way?