CGBitmapContextCreate ошибка комбинации неподдерживаемых параметров
Я читаю файл изображения и повторно отображаю его без внесения каких-либо изменений, как показано в коде ниже, но я получаю эту ошибку:
: CGBitmapContextCreate: неподдерживаемая комбинация параметров: 8 целых бит / компонент; 16 бит / пиксель; Однокомпонентное цветовое пространство; kCGImageAlphaPremultipliedLast; 3792 байта / строка.
Код является:
CGImageRef sourceImage = theImage.image.CGImage;
CFDataRef theData;
theData = CGDataProviderCopyData(CGImageGetDataProvider(sourceImage));
UInt8 *pixelData = (UInt8 *) CFDataGetBytePtr(theData);
CGContextRef context;
context = CGBitmapContextCreate(pixelData,
CGImageGetWidth(sourceImage),
CGImageGetHeight(sourceImage),
8,
CGImageGetBytesPerRow(sourceImage),
CGImageGetColorSpace(sourceImage),
kCGImageAlphaPremultipliedLast);
CGImageRef newCGImage = CGBitmapContextCreateImage(context);
UIImage *newImage = [UIImage imageWithCGImage:newCGImage];
CGContextRelease(context);
CFRelease(theData);
CGImageRelease(newCGImage);
theImage.image = newImage;
Этот код работал нормально, пока я недавно не обновился до Xcode 4.4.
Следуя предложению в iPhone CGContextRef CGBitmapContextCreate неподдерживаемая комбинация параметров, я заменил "CGImageGetColorSpace(sourceImage)" на "CGColorSpaceCreateDeviceRGB(),", но получил эту ошибку:
: CGBitmapContextCreate: недопустимые байты / строка данных: должно быть не менее 15168 для 8 целочисленных бит / компонент, 3 компонента, kCGImageAlphaPremultipliedLast.
Затем, когда я заменил "CGImageGetBytesPerRow(sourceImage)" на "CGImageGetBytesPerRow(sourceImage)*4", ошибки исчезли, но для копий уменьшенного в 4 раза изображения отображались рядом.
Кто-нибудь сталкивался с этой проблемой? Это связано с обновлением Xcode 4.4?
Спасибо! Шай
1 ответ
Решено с помощью kCGImageAlphaNone вместо kCGImageAlphaPremultipliedLast. Я до сих пор не понимаю, почему / как мое цветное изображение превращается в оттенки серого, и почему что-то, что раньше работало, изменило свое поведение, но, по крайней мере, я получаю некоторое отображение.