从Core Graphics上下文创建可重用的图像不会给我任何东西

时间:2010-01-19 07:47:19

标签: iphone core-graphics

我正在努力加快我的绘图代码。而不是创建图形上下文,将当前图像绘制到其中,并绘制它,我正在尝试使用一些像素数据创建上下文,并直接修改它。问题是,我对核心图形很新,我无法创建初始图像。我只想要一个坚实的红色图像,但我一无所获。这是我用于初始图像的内容。我认为问题与其余代码相同。

pixels = malloc(320*460*4);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pixels, 320, 460, 8, 4*320, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);

CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
CGContextAddRect(context, CGRectMake(0, 0, 320, 460));
CGContextFillPath(context);
trace = [[UIImageView alloc] initWithImage:UIGraphicsGetImageFromCurrentImageContext()];
CGContextRelease(context);

修改UIGraphicsGetImageFromCurrentImageContext()原来是问题所在。下面是一个有效的解决方案,但请注意,这并不比更简单的UIGraphicsBeginImageContext()

更快
pixels = malloc(320*460*4);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pixels, 320, 460, 8, 4*320, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0);
CGContextAddRect(context, CGRectMake(0, 0, 320, 460));
CGContextFillPath(context);
CGDataProviderRef dp = CGDataProviderCreateWithData(NULL, pixels, 320*460*4, NULL);
CGImageRef img = CGImageCreate(320, 460, 8, 32, 4*320, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big, dp, NULL, NO, kCGRenderingIntentDefault);
trace = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:img]];
CGImageRelease(img);
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);

1 个答案:

答案 0 :(得分:1)

对于初学者来说,您所绘制的上下文似乎与UIGraphics“当前图像上下文”无关。你在某个地方打电话给UIGraphicsBeginImageContext(CGSize size)吗?

不确定能否满足您的需求,但这肯定意味着您不太可能将nil作为当前图像上下文。