如何以编程方式创建UIImage?

时间:2013-01-30 00:38:39

标签: objective-c cocoa-touch uiimage

这不是你可能认为的开始。我知道如何使用UIImage,但我现在需要知道如何使用以下方法创建“空白”UIImage:

CGRect screenRect = [self.view bounds];

那么,那些维度。无论如何,我想知道如何创建一个UIImage,其颜色全白。这里没有实际图片。

这甚至可能吗?我确定是的,但也许我错了。

修改

这需要是“白色”图像。不是空白的。 :)

5 个答案:

答案 0 :(得分:34)

您需要使用CoreGraphics,如下所示。

CGSize size = CGSizeMake(desiredWidth, desiredHeight);
UIGraphicsBeginImageContextWithOptions(size, YES, 0);
[[UIColor whiteColor] setFill];
UIRectFill(CGRectMake(0, 0, size.width, size.height));
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

代码创建一个新的CoreGraphics图像上下文,其中选项作为参数传递;尺寸,不透明度和比例。通过传递0进行缩放,iOS会自动为当前设备选择适当的值。

然后,上下文填充颜色设置为[UIColor whiteColor]。然后,通过使用UIRectFill()并传递填充画布的矩形,然后立即使用该颜色填充画布。

然后创建当前上下文的UIImage,并关闭上下文。因此,图像变量包含所需大小的UIImage,填充为白色。

答案 1 :(得分:7)

Swift版本:

extension UIImage {

    static func emptyImage(with size: CGSize) -> UIImage? {
        UIGraphicsBeginImageContext(size)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }

}

答案 2 :(得分:4)

如果您只想绘制一个空图像,可以使用UIKit UIImageBeginImageContextWithOptions:方法。

    UIGraphicsBeginImageContext(CGSizeMake(width, height));
    CGContextAddRect(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height)); // this may not be necessary
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

上面的代码假定您绘制的图像宽度为x高度。它在图形上下文中添加了矩形,但可能没有必要。亲自尝试一下。这是要走的路。 :)

或者,如果要创建当前视图的快照,可以键入类似的代码

 UIGraphicsBeginImageContext(CGSizeMake(self.view.size.width, self.view.size.height));
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

如果使用图层,请不要忘记包含Quartz库。

答案 3 :(得分:1)

使用最新的UIGraphics类,在swift中,这看起来像这样(注意来自user1834305的答案中缺少的CGContextDrawPath,这就是生成透明图像的原因):

static func imageWithSize(size : CGSize, color : UIColor) -> UIImage {
    UIGraphicsBeginImageContext(size)
    let context = UIGraphicsGetCurrentContext()
    CGContextSetFillColorWithColor(context, color.CGColor)
    CGContextAddRect(context, CGRect(x: 0, y: 0, width: size.width, height: size.height));
    CGContextDrawPath(context, .Fill)
    let image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image
}

答案 4 :(得分:1)

基于@HixField和@RudolfAdamkovič回答。这是一个返回可选的扩展,我相信这是正确的方法(如果我错了,请纠正我!)?

此扩展程序允许您创建一个空的UIImage,其中包含您需要的任何大小(达到内存限制)以及您想要的任何填充颜色,默认为白色,如果您希望图像是清晰的颜色,那么使用类似下面的内容:

let size = CGSize(width: 32.0, height: 32.0)
if var image = UIImage.imageWithSize(size:size, UIColor.clear) {
    //image was successfully created, do additional stuff with it here.
}

这适用于swift 3.x:

extension UIImage {
     static func imageWithSize(size : CGSize, color : UIColor = UIColor.white) -> UIImage? {
         var image:UIImage? = nil
         UIGraphicsBeginImageContext(size)
         if let context = UIGraphicsGetCurrentContext() {
               context.setFillColor(color.cgColor)
               context.addRect(CGRect(origin: CGPoint.zero, size: size));
               context.drawPath(using: .fill)
               image = UIGraphicsGetImageFromCurrentImageContext();
        }
        UIGraphicsEndImageContext()
        return image
    }
}