我想基于UIColor动态创建1x1 UIImage.

我怀疑使用Quartz2d可以很快做到这一点,我正在仔细阅读文档,试图掌握基本原理.然而,看起来有很多潜在的缺陷:没有正确识别每个事物的位数和字节数,没有指定正确的标志,没有释放未使用的数据,等等.

如何使用Quartz 2d(或其他更简单的方式)安全地完成此操作?

推荐答案

您可以使用CGContextSetFillColorWithColorCGContextFillRect来执行以下操作:

Swift

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

Swift3

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;
}

Ios相关问答推荐

崩溃到初始化react -带网页的原生iOS应用程序

Flutter应用程序无法使用IOS/Swift的蓝牙核心库发现某些外围设备

滚动时突出显示工具栏项目

一堆UIGraphics方法在iOS 17中被弃用,没有明确的替代方法?

CIKernel的Metal Shader裁剪问题

SwiftUI 点击列表内不会触发 Select

如何使用 pushViewController 从 UIHostingController 的 SwiftUI 视图中推送 ViewController?

拔下设备后,DriverKit USB 驱动程序 (dext) 进程不会终止

使用 JSONDecoder 解码的对象的打印输出有问题

使用 Apollo 发布 iOS 应用程序时缺少推送通知权利

swiftUI中的剪辑形状无法使用旋转效果

SwiftUI - 使用切换switch 切换键盘类型(默认/数字)?

Swift如何表示单位转换的标准大气压

如何使用 Swift 文档注释

在 UICollectionView 上从右到左对齐

如何在导航栏右侧添加多个 UIBarButtonItem?

如何从一个特定的视图控制器中隐藏导航栏

如何防止 iOS 设备上的显示屏变暗和关闭?

两个数字之间的动画UILabel文本?

NSURL 到带有 XCTest 的测试包中的文件路径