我试图在上下文中添加两个图像,但是它不起作用,并抛出
GBitmapContextCreateImage:无效上下文0x0
错误。我使用以下代码:
//some image
CGImageRef image = ...
//some image as well, but masked. Works perfectly.
CGImageRef blurredAndMasked = CGImageCreateWithMask(blurred, mask);
//Both images are fine. Sure.
//Initializing the context and color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(nil, frameSize.width, frameSize.height, 8, 0, colorSpace, kCGBitmapAlphaInfoMask);
//Drawing images into the context
CGContextDrawImage(ctx, CGRectMake(0, 0, frameSize.width, frameSize.height), image);
CGContextDrawImage(ctx, CGRectMake(0, 0, frameSize.width, frameSize.height), blurredAndMasked);
//getting the resulting image
CGImageRef ret = CGBitmapContextCreateImage(ctx);
//releasing the stuff
CGImageRelease(image);
CGImageRelease(blurred);
CGImageRelease(blurredAndMasked);
CGColorSpaceRelease(colorSpace);
CGContextRelease(ctx);这看起来很好,但是最终的图像都是黑色的,或者看起来非常类似于此:

代码中应该修改什么?提前感谢!
发布于 2015-07-15 17:42:13
kCGBitmapAlphaInfoMask不是到CGBitmapContextCreate的最后一个(bitmapInfo)参数的有效值。它是一个掩码(因此是名称),可以与&操作符一起使用,以便将CGImageAlphaInfo从CGBitmapInfo值中提取出来。在需要kCGBitmapAlphaInfoMask或CGImageAlphaInfo的地方,您永远不会通过CGImageAlphaInfo。
假设您不需要特定的字节顺序,我相信这是iOS上alpha通道的最高性能像素格式:
CGContextRef ctx = CGBitmapContextCreate(nil,
frameSize.width, frameSize.height, 8, 0, colorSpace,
kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);这应该是没有alpha通道的最高性能:
CGContextRef ctx = CGBitmapContextCreate(nil,
frameSize.width, frameSize.height, 8, 0, colorSpace,
kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst);https://stackoverflow.com/questions/31436468
复制相似问题