1. ホーム
  2. ios

[解決済み] iPhoneで色付きの1x1 UIImageを動的に作成するには?

2022-08-25 12:28:16

質問

UIColorを元に1x1のUIImageを動的に作成したいのですが、可能でしょうか?

これは Quartz2d ですぐにできると思うので、基本的なことを把握するためにドキュメントを熟読しているところです。 しかし、多くの潜在的な落とし穴があるように見えます。物事ごとのビットとバイトの数を正しく識別しない、正しいフラグを指定しない、未使用のデータを解放しない、などです。

Quartz 2d (または別のもっと簡単な方法) でどのように安全に行うことができますか?

どのように解決するのですか?

この場合 CGContextSetFillColorWithColorCGContextFillRect を使用します。

スウィフト

extension UIImage {
    class func image(with color: UIColor) -> UIImage {
        let rect = CGRectMake(0.0, 0.0, 1.0, 1.0)
        UIGraphicsBeginImageContext(rect.size)
        let context = UIGraphicsGetCurrentContext()

        CGContextSetFillColorWithColor(context, color.CGColor)
        CGContextFillRect(context, rect)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return image
    }
}

スウィフト3

extension UIImage {
    class func image(with color: UIColor) -> UIImage {
        let rect = CGRect(origin: CGPoint(x: 0, y:0), size: CGSize(width: 1, height: 1))
        UIGraphicsBeginImageContext(rect.size)
        let context = UIGraphicsGetCurrentContext()!

        context.setFillColor(color.cgColor)
        context.fill(rect)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return image!
    }
}

Objective-C

+ (UIImage *)imageWithColor:(UIColor *)color {
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}