Оттенок UIImage без перерисовки - PullRequest
0 голосов
/ 14 февраля 2012

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

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

...