这不是你可能认为的开始。我知道如何使用UIImage,但我现在需要知道如何使用以下方法创建“空白”UIImage:
CGRect screenRect = [self.view bounds];
那么,那些维度。无论如何,我想知道如何创建一个UIImage,其颜色全白。这里没有实际图片。
这甚至可能吗?我确定是的,但也许我错了。
这需要是“白色”图像。不是空白的。 :)
答案 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
}
}