2013-04-14 9 views
9

私はどこからでも見てきましたが、私はこれを行う方法を見つけることができません。私は特定の幅と高さの黒色のUIImageを作成する必要があります(幅と高さの変更、私はブラックボックスを作成し、それをUIImageにロードすることはできません)。 CGRectを作成してUIImageに変換する方法はありますか?あるいは、シンプルなブラックボックスを作るための他の方法がありますか?黒いUIImageを作成するには?

+1

あなただけのブラックボックスを必要とし、 'frame'のためにあなたの' CGRect'を使用して 'UIView'を作成し、' '[UIColor blackColor]に' backgroundColor'を設定し、追加した場合この新しい「UIView」を既存のビュー(例: 'addSubview'を使ってコントローラからこれを行う場合は' self.view'を実行します)。 – Rob

+0

密接に関連しています:[安価な色の帯については、UIViewまたはUIImage?](http://stackoverflow.com/q/13885588)関連項目:[色付きUIImageのオーバーレイ](http:// stackoverflow。あなたが求めていることをする方法を教えてくれる[an answer](http://stackoverflow.com/a/10620128/603977)を持っています。 –

答えて

22

状況によっては、UIViewbackgroundColor[UIColor blackColor]に設定して使用している可能性があります。また、画像が単色である場合は、実際に表示する寸法の画像は必要ありません。必要なスペースを満たすように1x1ピクセルの画像を調整するだけです(たとえば、のcontentModeUIViewContentModeScaleToFillに設定するなど)。実際に、このような画像を生成する方法を確認することは有益かもしれ、と述べた

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

固体。私が変更する唯一のことは、おそらくコンテキストに不透明な色を描画しているので、 '不透明 'を' YES'に設定できることです。 – warrenm

+0

実際に 'opaque'を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からそれを作成することにより、1920×1080である黒UIImageを作成する例です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)