Расшифровать изображения в фоновом потоке?

У меня есть фоновый поток, который загружает изображения и отображает их в основном потоке. Я заметил, что фоновому потоку почти нечего делать, потому что фактическое декодирование изображения, похоже, выполняется в основном потоке:

alt text

До сих пор я пытался позвонить [UIImage imageNamed:] , ] [UIImage imageWithData:] и CGImageCreateWithJPEGDataProvider в фоновом потоке без разницы. Есть ли способ принудительно выполнить декодирование в фоновом потоке?

Здесь уже есть аналогичный вопрос , но он не помогает. Как я там писал, я попробовал следующий трюк:

@implementation UIImage (Loading)

- (void) forceLoad
{
    const CGImageRef cgImage = [self CGImage];  

    const int width = CGImageGetWidth(cgImage);
    const int height = CGImageGetHeight(cgImage);

    const CGColorSpaceRef colorspace = CGImageGetColorSpace(cgImage);
    const CGContextRef context = CGBitmapContextCreate(
        NULL, /* Where to store the data. NULL = don’t care */
        width, height, /* width & height */
        8, width * 4, /* bits per component, bytes per row */
        colorspace, kCGImageAlphaNoneSkipFirst);

    NSParameterAssert(context);
    CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);
    CGContextRelease(context);
}

@end

Это работает (заставляет изображение декодироваться), но также вызывает явно дорогостоящий вызов ImageIO_BGR_A_TO_RGB_A_8Bit .

12
задан Community 23 May 2017 в 11:53
поделиться