Tint UIImage没有重绘

时间:2012-02-14 16:18:20

标签: image ios5 uiimage tint

我正在寻找能够改变光源周围球体颜色的能力。现在我通过从Color创建CGImage并用PNG屏蔽它来做到这一点。这是有效的,但每当我改变颜色时,我需要重绘整个图像,这非常慢。

是否可以在不重新绘制图像的情况下着色图像?

感谢您的帮助

这是我目前创建球体的方法:

+ (UIImage *)imageWithColor:(UIColor *)color andImage:(UIImage *)image
{
    // create Image from Color
    CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context,[color CGColor]);
    CGContextFillRect(context, rect);
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    // mask color
    CGImageRef actualMask = CGImageMaskCreate(CGImageGetWidth(image.CGImage),
                                              CGImageGetHeight(image.CGImage),
                                              CGImageGetBitsPerComponent(image.CGImage),
                                              CGImageGetBitsPerPixel(image.CGImage),
                                              CGImageGetBytesPerRow(image.CGImage),
                                              CGImageGetDataProvider(image.CGImage), NULL, false);


    CGImageRef masked = CGImageCreateWithMask([img CGImage], actualMask);
    CGImageRelease(actualMask);
    UIImage * retImage = [UIImage imageWithCGImage:masked];
    CGImageRelease(masked);
    return retImage;
}

如果有人知道如何测量哪个函数调用很慢,我会很感激答案。我用仪器执行应用程序测量帧速率,并且在改变颜色时我得到每秒3帧,这不是我所期望的。;)

1 个答案:

答案 0 :(得分:0)

您需要使用Time Profiler选项运行Instruments。