2013-04-14 38 views
9

我到处看了看四周,但我不能找到一个方法来做到这一点。我需要创建一个特定宽度和高度的黑色UIImage(宽度和高度变化,所以我不能只创建一个黑盒子,然后将其加载到UIImage中)。有什么方法可以制作CGRect然后将其转换为UIImage?或者还有其他方法可以制作一个简单的黑盒子吗?如何创建一个黑色的UIImage?

+1

如果你只是需要一个黑盒子,用你'CGRect'为'frame'创建'UIView',设置'backgroundColor'到'[的UIColor blackColor]',然后添加这个新的'UIView'到您现有的视图(例如'self.view',如果从控制器执行此操作),使用'addSubview'。 – Rob

+0

密切相关:[对于彩色,这是更便宜的,或的UIView的UIImage的大片?](http://stackoverflow.com/q/13885588)参见:[叠加一个UIImage用彩色](HTTP://计算器。 COM/q/845278),其具有[答案](http://stackoverflow.com/a/10620128/603977),告诉你怎么做你问什么。 –

回答

22

根据您的情况,您可能只需使用UIView,其backgroundColor设置为[UIColor blackColor]。另外,如果图像颜色鲜艳,则不需要实际上是要显示其尺寸的图像;你可以缩放1x1像素图像(例如,通过设置一个UIImageViewcontentModeUIViewContentModeScaleToFill)来填充所需的空间。

话虽如此,它可能是有益的,看看如何实际产生这样一个形象:

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(); 
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.apeth.com/iOSBook/ch15.html#_graphics_contexts

+0

固体。我唯一会改变的是,'opaque'可以设置为'YES',因为我们可能会在上下文中绘制不透明的颜色。 – warrenm

+0

其实如果你把'不透明'设置为YES,我认为你甚至不需要绘制黑色填充的矩形! :)一个不透明的图形上下文*是*黑色。 – matt

+0

好的。我想知道这是否记录在任何地方,或者如果它只是一个实现的怪癖。 – warrenm

2

斯威夫特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() 
} 
0

下面是从创建一个CGImage创建它创建了一个黑色的UIImage是1920×1080的例子从CIImage:

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) 
相关问题