CGBitmapContextCreate ошибка сочетания неподдерживаемых параметров

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

: CGBitmapContextCreate: неподдерживаемая комбинация параметров: 8 целочисленных битов на компонент; 16 бит / пиксель; 1-компонентное цветовое пространство; 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 неподдерживаемой комбинации параметров, я заменил CGImageGetColor sourceImage), "CGColorSpaceCreateDeviceRGB (),", но получил эту ошибку:

: CGBitmapContextCreate: недопустимые байты данных / строка: должно быть не менее 15168 для 8 целочисленных битов / компонент, 3 компонента, kCGImageAlphaPremultipliedLast.

Затем, когда я заменил «CGImageGetBytesPerRow (sourceImage)» на «CGImageGetBytesPerRow (sourceImage) * 4», ошибки исчезли, но копии уменьшенного в 4 раза изображения отображались рядом.

Кто-нибудь сталкивался с этой проблемой? Связано ли это с обновлением Xcode 4.4?

Спасибо! Шай


person user1643881    schedule 04.09.2012    source источник


Ответы (1)


Решено с использованием kCGImageAlphaNone вместо kCGImageAlphaPremultipliedLast. Я до сих пор не понимаю, почему / как мое цветное изображение превращается в оттенки серого и почему что-то, что раньше работало, изменило свое поведение, но, по крайней мере, я получаю некоторое отображение.

person user1643881    schedule 07.09.2012
comment
Спасибо, что разместили свое решение: оно мне тоже помогло. - person Todd; 24.09.2012