从图形上下文创建蒙版

时间:2010-04-27 12:15:31

标签: iphone core-graphics quartz-graphics alpha

我希望能够在应用包中的png中创建没有alpha的灰度图像。

这很有效,我创建了一个图像:

// Create graphics context the size of the overlapping rectangle
UIGraphicsBeginImageContext(rectangleOfOverlap.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();

// More stuff

CGContextDrawImage(ctx, drawRect2, [UIImage imageNamed:@"Image 01.png"].CGImage);

// Create the new UIImage from the context
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

然而,得到的图像是每像素32位并且具有alpha通道,所以当我使用CGCreateImageWithMask时它不起作用。我试过创建一个位图上下文:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef ctx =CGBitmapContextCreate(nil, rectangleOfOverlap.size.width, rectangleOfOverlap.size.height, 8, rectangleOfOverlap.size.width , colorSpace, kCGImageAlphaNone);

UIGraphicsGetImageFromCurrentImageContext返回零,并且不会创建生成的图像。我在这里做些蠢事吗?

非常感谢任何帮助。

此致

戴夫

1 个答案:

答案 0 :(得分:0)

好的,我想我有一个答案(或其中几个)......

如果上下文创建失败,则控制台窗口会给出一个合理的错误消息,并告诉您失败的原因。在这种情况下,创建了上下文,因此没有错误。

其次,CGBtimapContext支持的参数列表如下: http://developer.apple.com/mac/library/qa/qa2001/qa1037.html

第三,UIGraphicsGetImageFromCurrentImageContext()仅适用于我需要使用的UIGraphicsBeginGraphicsContext()创建的通用上下文:

UIImage *newImage = [UIImage imageWithCGImage:CGBitmapContextCreateImage(ctx)];
如果我使用NULL作为第一个参数创建上下文,即使文档暗示从10.3开始为你处理内存,我也无法使用CGBitmapContextGetData(ctx)获取基础像素数据。为了解决这个问题,我创建了一个名为:

的方法
- (CGContextRef) newGreyScaleBitmapContextOfSize:(CGSize) size;

该方法通过malloc化内存并返回上下文引用来创建上下文。我不确定这是否全面,但由于我花了好几天的时间,我想我会告诉你到目前为止我发现了什么。

希望这有帮助,

戴夫