24

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

CGRect screenRect = [self.view bounds];

嗯,这些尺寸。无论如何,我想知道如何创建一个 UIImage ,这些尺寸全是白色的。这里没有实际图像。

这甚至可能吗?我敢肯定,但也许我错了。

编辑

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

4

5 回答 5

39

您需要使用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()立即,通过使用并传递一个填充画布的矩形,画布实际上被填充了该颜色。

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

于 2013-01-30T02:23:59.220 回答
9

斯威夫特版本:

extension UIImage {

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

}
于 2016-08-24T09:37:23.173 回答
5

如果你只想绘制一个空图像,你可以使用 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 库。

于 2013-01-30T00:47:18.117 回答
2

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

此扩展程序允许您创建一个空的 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
    }
}
于 2017-07-14T03:59:27.297 回答
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
}
于 2016-05-10T10:44:33.913 回答