Ios 用颜色填充CGBitmapContext

Ios 用颜色填充CGBitmapContext,ios,objective-c,core-graphics,Ios,Objective C,Core Graphics,我试图用纯红填充cgitmapcontext并获得CGImgRef,但图像是透明的。 这是密码 CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(NULL, 1,

我试图用纯红填充cgitmapcontext并获得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);

请不要建议使用UIBezierPath和其他UIKit工具。我需要使用CoreGraphics。

问题已通过使用
CGContextSetFillColorWithColor(上下文[UIColor redColor].CGColor]
解决;顺便说一句,知道我做错了什么是很有趣的。另外,关于CGContextSetFillColor的苹果文档中说“请注意,现在使用的首选API是CGContextSetFillColorWithColor。”

问题是通过使用
CGContextSetFillColorWithColor(context[UIColor redColor].CGColor)
解决的;顺便说一句,知道我做错了什么是很有趣的。另外,苹果公司关于CGContextSetFillColor的文档中说:“请注意,现在使用的首选API是CGContextSetFillColorWithColor。”

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

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

CGContextSetFillColorSpace(上下文,颜色空间);// 问题是您忘记设置填充颜色空间。必须这样做才能使
CGContextSetFillColor
正常工作(因为这会告诉它需要多少组件以及如何解释它们)。这项工作:

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

CGContextSetFillColorSpace(上下文,颜色空间);//您可能假设上下文的颜色空间与上下文的当前填充颜色空间相同,但事实并非如此。您可能假设上下文的颜色空间与上下文的当前填充颜色空间相同,但事实并非如此。更简单的是:
[[UIColor redColor]set]。不需要
CGContextSetFillColorWithColor
@rmaddy,但他没有规定UIKit。当然,他的回答违反了一项规定…@马特:看看这个。我的评论完全是基于我在回答中看到的。我没有读整个问题。更简单的是:
[[UIColor redColor]set]。不需要
CGContextSetFillColorWithColor
@rmaddy,但他没有规定UIKit。当然,他的回答违反了一项规定…@马特:看看这个。我的评论完全是基于我在回答中看到的。我没有读完整的问题。