修改 UIGraphicsContext 中的原始 UIImage

Modify original UIImage in UIGraphicsContext

我见过很多示例,其中有人从输入 UIImage 中获取修改后的新 UIImage。看起来像:

- (UIImage *)imageByDrawingCircleOnImage:(UIImage *)image
{
    // begin a graphics context of sufficient size
    UIGraphicsBeginImageContext(image.size);

    // draw original image into the context
    [image drawAtPoint:CGPointZero];

    // get the context for CoreGraphics
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    // draw there

我有类似的问题,但我真的想修改输入图像。我想它会工作得更快,因为我不会每次都绘制原始图像。但我找不到它的任何样本。我怎样才能得到原始图像的图像上下文,它已经被绘制出来了?

UIImage 由于多种原因(大多数与性能和内存有关)是不可变的。想乱就必须复制一份

如果您想要可变图像,只需将其绘制到上下文中并继续使用该上下文即可。您可以使用 CGBitmapContextCreate 创建自己的上下文。

就是说,不要在这里过分猜测系统。 UIImage 和 Core Graphics 有很多优化,你看到这么多复制图像的例子是有原因的。不要 "suppose it would work faster." 你真的必须在你的程序中分析它。