我希望能够在应用包中的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返回零,并且不会创建生成的图像。我在这里做些蠢事吗?
非常感谢任何帮助。
此致
戴夫
答案 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化内存并返回上下文引用来创建上下文。我不确定这是否全面,但由于我花了好几天的时间,我想我会告诉你到目前为止我发现了什么。
希望这有帮助,
戴夫