<Error>: CGBitmapContextCreateImage: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.
Replying here since I had the exact same pixel format when I got this error. I hope this answer helps someone.
The reason it was failing, in my case, was that kCGImageAlphaLast
isn't a permitted value anymore on iOS 8, although it works well on iOS 7. The 32 pbb, 8 bpc combination only allows kCGImageAlphaNoneSkip*
and kCGImageAlphaPremultiplied*
for the Alpha Info. Apparently this was a problem always, but wasn't enforced before iOS 8. Here's my solution:
- (CGBitmapInfo)normalizeBitmapInfo:(CGBitmapInfo)oldBitmapInfo {
//extract the alpha info by resetting everything else
CGImageAlphaInfo alphaInfo = oldBitmapInfo & kCGBitmapAlphaInfoMask;
//Since iOS8 it's not allowed anymore to create contexts with unmultiplied Alpha info
if (alphaInfo == kCGImageAlphaLast) {
alphaInfo = kCGImageAlphaPremultipliedLast;
}
if (alphaInfo == kCGImageAlphaFirst) {
alphaInfo = kCGImageAlphaPremultipliedFirst;
}
//reset the bits
CGBitmapInfo newBitmapInfo = oldBitmapInfo & ~kCGBitmapAlphaInfoMask;
//set the bits to the new alphaInfo
newBitmapInfo |= alphaInfo;
return newBitmapInfo;
}
In my case the failing piece of code looked like this, where imageRef is a CGImageRef of a PNG loaded from the app bundle:
CGContextRef bitmap = CGBitmapContextCreate(NULL,
newRect.size.width,
newRect.size.height,
CGImageGetBitsPerComponent(imageRef),
0,
CGImageGetColorSpace(imageRef),
CGImageGetBitmapInfo(imageRef));
Sources: http://stackoverflow.com/a/19345325/3099609