iPhone: Изменение CGImageAlphaInfo CGImage

У меня есть изображение PNG, которое имеет неподдерживаемый формат пикселя контекста растрового изображения. Каждый раз, когда я пытаюсь изменить размер изображения, CGBitmapContextCreate() дроссели на неподдерживаемом формате

Я получаю следующую ошибку (ошибка, отформатированная для легкого чтения):

CGBitmapContextCreate: unsupported parameter combination: 
    8 integer bits/component; 
    32 bits/pixel; 
    3-component colorspace; 
    kCGImageAlphaLast; 
    1344 bytes/row.

Список поддерживаемых форматов пикселя определенно не поддерживает эту комбинацию. Кажется, что я должен перерисовать изображение и переместить информацию об альфа-канале в kCGImageAlphaPremultipliedFirst или kCGImageAlphaPremultipliedLast.

Я понятия не имею, как пойти о выполнении этого.

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

25
задан TechZen 19 March 2010 в 13:59
поделиться

1 ответ

Да, у меня были проблемы с 8-битными (индексированными) .PNG. Мне пришлось преобразовать его в более родное изображение для выполнения графических операций. По сути, я сделал что-то вроде этого:

- (UIImage *) normalize {

    CGColorSpaceRef genericColorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef thumbBitmapCtxt = CGBitmapContextCreate(NULL, 
                                                         self.size.width, 
                                                         self.size.height, 
                                                         8, (4 * self.size.width), 
                                                         genericColorSpace, 
                                                         kCGImageAlphaPremultipliedFirst);
    CGColorSpaceRelease(genericColorSpace);
    CGContextSetInterpolationQuality(thumbBitmapCtxt, kCGInterpolationDefault);
    CGRect destRect = CGRectMake(0, 0, self.size.width, self.size.height);
    CGContextDrawImage(thumbBitmapCtxt, destRect, self.CGImage);
    CGImageRef tmpThumbImage = CGBitmapContextCreateImage(thumbBitmapCtxt);
    CGContextRelease(thumbBitmapCtxt);    
    UIImage *result = [UIImage imageWithCGImage:tmpThumbImage];
    CGImageRelease(tmpThumbImage);

    return result;    
}
56
ответ дан 28 November 2019 в 18:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: