用颜色填充CGBitmapContext

时间:2018-01-27 17:43:54

标签: ios objective-c core-graphics

我尝试用纯红色填充CGBitmapContext并获取CGImgRef,但图像全部透明。 这是代码

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL,
                                             1,
                                             1,
                                             8,
                                             0,
                                             colorSpace,
                                             kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGFloat components[] = {1.0,0.0,0.0,1.0};
CGContextSetFillColor(context, components);
CGContextFillRect(context, CGRectMake(0, 0, 1, 1));
CGImageRef imgRef = CGBitmapContextCreateImage(context);

请不要推荐使用UIBezierPaths和其他UIKit东西。我需要使用CoreGraphics。

2 个答案:

答案 0 :(得分:2)

问题是您忘记设置填充色彩空间。你必须这样做才能让CGContextSetFillColor正常工作(因为它告诉它需要多少组件以及如何解释它们)。这有效:

CGFloat components[] = {1,0,0,1};
CGContextSetFillColorSpace(context, colorSpace); // <-- this was missing
CGContextSetFillColor(context, components);
// and now fill ...

答案 1 :(得分:-1)

使用CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor)解决了

问题;顺便问一下,知道我做错了会很有趣。此外,关于CGContextSetFillColor的Apple文档说&#34;请注意,首选的API现在是CGContextSetFillColorWithColor。&#34;