首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从CGImageRef获得CGContextRef?

如何从CGImageRef获得CGContextRef?
EN

Stack Overflow用户
提问于 2015-07-15 16:53:45
回答 1查看 1.7K关注 0票数 0

我试图在上下文中添加两个图像,但是它不起作用,并抛出

GBitmapContextCreateImage:无效上下文0x0

错误。我使用以下代码:

代码语言:javascript
复制
//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);

这看起来很好,但是最终的图像都是黑色的,或者看起来非常类似于此:

代码中应该修改什么?提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-15 17:42:13

kCGBitmapAlphaInfoMask不是到CGBitmapContextCreate的最后一个(bitmapInfo)参数的有效值。它是一个掩码(因此是名称),可以与&操作符一起使用,以便将CGImageAlphaInfoCGBitmapInfo值中提取出来。在需要kCGBitmapAlphaInfoMaskCGImageAlphaInfo的地方,您永远不会通过CGImageAlphaInfo

假设您不需要特定的字节顺序,我相信这是iOS上alpha通道的最高性能像素格式:

代码语言:javascript
复制
CGContextRef ctx = CGBitmapContextCreate(nil,
    frameSize.width, frameSize.height, 8, 0, colorSpace,
    kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);

这应该是没有alpha通道的最高性能:

代码语言:javascript
复制
CGContextRef ctx = CGBitmapContextCreate(nil,
    frameSize.width, frameSize.height, 8, 0, colorSpace,
    kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31436468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档