Подкрасить UIImage без перерисовки

Я ищу возможность изменить цвет сферы вокруг источника света. Прямо сейчас я делаю это, создавая 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 кадров в секунду, чего я не ожидал .. ;)


person sensslen    schedule 14.02.2012    source источник


Ответы (1)


Вам нужно запустить инструменты с опцией Time Profiler.

person Maciej Swic    schedule 04.12.2012