How to create a colored 1x1 UIImage on the iPhone dynamically? How to create a colored 1x1 UIImage on the iPhone dynamically? ios ios

How to create a colored 1x1 UIImage on the iPhone dynamically?


You can use CGContextSetFillColorWithColor and CGContextFillRect for this:

Swift

extension UIImage {    class func image(with color: UIColor) -> UIImage {        let rect = CGRectMake(0.0, 0.0, 1.0, 1.0)        UIGraphicsBeginImageContext(rect.size)        let context = UIGraphicsGetCurrentContext()        CGContextSetFillColorWithColor(context, color.CGColor)        CGContextFillRect(context, rect)        let image = UIGraphicsGetImageFromCurrentImageContext()        UIGraphicsEndImageContext()        return image    }}

Swift3

extension UIImage {    class func image(with color: UIColor) -> UIImage {        let rect = CGRect(origin: CGPoint(x: 0, y:0), size: CGSize(width: 1, height: 1))        UIGraphicsBeginImageContext(rect.size)        let context = UIGraphicsGetCurrentContext()!        context.setFillColor(color.cgColor)        context.fill(rect)        let image = UIGraphicsGetImageFromCurrentImageContext()        UIGraphicsEndImageContext()        return image!    }}

Objective-C

+ (UIImage *)imageWithColor:(UIColor *)color {    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);    UIGraphicsBeginImageContext(rect.size);    CGContextRef context = UIGraphicsGetCurrentContext();    CGContextSetFillColorWithColor(context, [color CGColor]);    CGContextFillRect(context, rect);    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return image;}


Here's another option based on Matt Stephen's code. It creates a resizable solid color image such that you could reuse it or change it's size (e.g. use it for a background).

+ (UIImage *)prefix_resizeableImageWithColor:(UIColor *)color {    CGRect rect = CGRectMake(0.0f, 0.0f, 3.0f, 3.0f);    UIGraphicsBeginImageContext(rect.size);    CGContextRef context = UIGraphicsGetCurrentContext();    CGContextSetFillColorWithColor(context, [color CGColor]);    CGContextFillRect(context, rect);    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(1, 1, 1, 1)];    return image;}

Put it in a UIImage category and change the prefix.


I used Matt Steven's answer many times so made a category for it:

@interface UIImage (mxcl)+ (UIImage *)squareImageWithColor:(UIColor *)color dimension:(int)dimension;@end@implementation UIImage (mxcl)+ (UIImage *)squareImageWithColor:(UIColor *)color dimension:(int)dimension {    CGRect rect = CGRectMake(0, 0, dimension, dimension);    UIGraphicsBeginImageContext(rect.size);    CGContextRef context = UIGraphicsGetCurrentContext();    CGContextSetFillColorWithColor(context, [color CGColor]);    CGContextFillRect(context, rect);    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return image;}@end