24

これは、おそらく最初から考えていたものではありません。UIImageの使用方法は知っていますが、次を使用して「空白の」UIImageを作成する方法を知る必要があります。

CGRect screenRect = [self.view bounds];

まあ、それらの寸法。とにかく、これらの寸法をすべて白にしたUIImageを作成する方法を知りたいです。ここには実際の画像はありません。

これも可能ですか?確かにそうですが、間違っているかもしれません。

編集

これは「白い」画像である必要があります。空白ではありません。:)

4

5 に答える 5

39

次のように、を使用する必要があり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()すぐに、キャンバスを塗りつぶす長方形を使用して渡すことにより、キャンバスは実際にその色で塗りつぶされます。

次に、現在のコンテキストのAUIImageが作成され、コンテキストが閉じられます。したがって、画像変数には、UIImage白で塗りつぶされた目的のサイズのが含まれます。

于 2013-01-30T02:23:59.220 に答える
9

Swiftバージョン:

extension UIImage {

    static func emptyImage(with size: CGSize) -> UIImage? {
        UIGraphicsBeginImageContext(size)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }

}
于 2016-08-24T09:37:23.173 に答える
5

空の画像だけを描画したい場合は、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ライブラリを含めることを忘れないでください。

于 2013-01-30T00:47:18.117 に答える
2

@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.
}

これはswift3.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
    }
}
于 2017-07-14T03:59:27.297 に答える
1

最新のUIGraphicsクラスを使用すると、迅速に、これは次のようになります(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
}
于 2016-05-10T10:44:33.913 に答える