这不是您可能认为的开始。我知道如何使用 UIImage,但我现在需要知道如何使用以下方法创建“空白” UIImage:
CGRect screenRect = [self.view bounds];
嗯,这些尺寸。无论如何,我想知道如何创建一个 UIImage ,这些尺寸全是白色的。这里没有实际图像。
这甚至可能吗?我敢肯定,但也许我错了。
编辑
这需要是“白色”图像。不是空的。:)
这不是您可能认为的开始。我知道如何使用 UIImage,但我现在需要知道如何使用以下方法创建“空白” UIImage:
CGRect screenRect = [self.view bounds];
嗯,这些尺寸。无论如何,我想知道如何创建一个 UIImage ,这些尺寸全是白色的。这里没有实际图像。
这甚至可能吗?我敢肯定,但也许我错了。
这需要是“白色”图像。不是空的。:)
您需要使用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,填充为白色。
斯威夫特版本:
extension UIImage {
static func emptyImage(with size: CGSize) -> UIImage? {
UIGraphicsBeginImageContext(size)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
如果你只想绘制一个空图像,你可以使用 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 库。
基于@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
}
}
使用最新的 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
}