2015-03-02 3 views
1

Я ищу способ оптимизации моих изображений, преобразовывая его цвет с 32-битного на 16 бит, а не просто изменяя его размер. Так это то, что я делаю:Преобразование изображения в 16-битное цветное изображение

- (UIImage *)optimizeImage:(UIImage *)image 
{ 
    float newWidth = image.size.width; 
    float newHeight = image.size.height; 

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef context = CGBitmapContextCreate(NULL, newWidth, newHeight, 5, newWidth * 4, 
               colorSpace, kCGImageAlphaNone | kCGBitmapByteOrder32Big); 
    CGColorSpaceRelease(colorSpace); 

    CGInterpolationQuality quality = kCGInterpolationHigh; 
    CGContextSetInterpolationQuality(context, quality); 

    CGImageRef srcImage = CGImageRetain(image.CGImage); 

    CGContextDrawImage(context, CGRectMake(0, 0, newWidth, newHeight), 
         srcImage); 
    CGImageRelease(srcImage); 
    CGImageRef dst = CGBitmapContextCreateImage(context); 
    CGContextRelease(context); 

    UIImage *result = [UIImage imageWithCGImage:dst]; 
    CGImageRelease(dst); 

    UIGraphicsEndImageContext(); 

    return result; 
} 

Вопрос этот кусок кода является то, что, когда я запускаю его, я получаю эту самую ошибку:

CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNone; 10392 bytes/row.

Так что мой вопрос: что поддерживаемая комбинация для CGBitmapContextCreate? Что я должен выбрать для параметра bitmapInfo в этой ситуации? Пожалуйста, предложите.

ответ

2

Итак, я нашел свой ответ в Mac Developer Library. Там в таблице для поддерживаемых форматов пикселей, и это то, что я ищу:

RGB - 16 bpp, 5 bpc, kCGImageAlphaNoneSkipFirst

Так что я изменил мой bitmapInfo и контекст создали просто отлично. Надеюсь, это полезно для кого-то.

Смежные вопросы