9

我四处张望,但我找不到办法做到这一点。我需要创建一个具有一定宽度和高度的黑色 UIImage(宽度和高度会发生变化,所以我不能只创建一个黑盒子然后将其加载到 UIImage 中)。有什么方法可以制作 CGRect 然后将其转换为 UIImage 吗?还是有其他方法可以制作一个简单的黑匣子?

4

5 回答 5

25

根据您的情况,您可能只使用 aUIView并将其backgroundColor设置为[UIColor blackColor]。此外,如果图像是纯色的,则您不需要实际上是您想要显示它的尺寸的图像;您可以缩放 1x1 像素图像以填充必要的空间(例如,通过将contentModea设置UIImageViewUIViewContentModeScaleToFill)。

话虽如此,看看如何实际生成这样的图像可能是有益的:

Objective-C

CGSize imageSize = CGSizeMake(64, 64);
UIColor *fillColor = [UIColor blackColor];
UIGraphicsBeginImageContextWithOptions(imageSize, YES, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
[fillColor setFill];
CGContextFillRect(context, CGRectMake(0, 0, imageSize.width, imageSize.height));
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

迅速

let imageSize = CGSize(width: 420, height: 120)
let color: UIColor = .black
UIGraphicsBeginImageContextWithOptions(imageSize, true, 0)
let context = UIGraphicsGetCurrentContext()!
color.setFill()
context.fill(CGRect(x: 0, y: 0, width: imageSize.width, height: imageSize.height))
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
于 2013-04-14T19:46:42.260 回答
6
UIGraphicsBeginImageContextWithOptions(CGSizeMake(w,h), NO, 0);
UIBezierPath* p =
    [UIBezierPath bezierPathWithRect:CGRectMake(0,0,w,h)];
[[UIColor blackColor] setFill];
[p fill];
UIImage* im = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

现在im是图像。

该代码与我书中的这一部分几乎没有变化:http ://www.aeth.com/iOSBook/ch15.html#_graphics_contexts

于 2013-04-14T19:47:50.650 回答
3

斯威夫特 3:

func uiImage(from color:UIColor?, size:CGSize) -> UIImage? {

    UIGraphicsBeginImageContextWithOptions(size, true, 0)
    defer {
        UIGraphicsEndImageContext()
    }

    let context = UIGraphicsGetCurrentContext()
    color?.setFill()
    context?.fill(CGRect.init(x: 0, y: 0, width: size.width, height: size.height))
    return UIGraphicsGetImageFromCurrentImageContext()
}
于 2017-03-13T23:00:02.930 回答
2

像这样

let image = UIGraphicsImageRenderer(size: bounds.size).image { _ in
      UIColor.black.setFill()
      UIRectFill(bounds)
}

正如这个 WWDC 视频中所引用的那样

还有另一个较旧的功能。UIGraphicsBeginImageContext。但请不要使用它。

于 2020-03-21T12:55:17.793 回答
0

下面是一个示例,它通过从 CIImage 创建的 CGImage 创建一个 1920x1080 的黑色 UIImage:

let frame = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 1920, height: 1080))
let cgImage = CIContext().createCGImage(CIImage(color: .black()), from: frame)!
let uiImage = UIImage(cgImage: cgImage)
于 2017-05-24T05:17:56.453 回答