UIGraphicsGetCurrentContext出错

时间:2009-09-07 20:46:58

标签: iphone iphone-sdk-3.0

我一直在尝试使用Quartz在图层上写一个图像,但我看到的只是完全空的图像...这是代码

CGContextRef context = UIGraphicsGetCurrentContext();

CGRect backRect  = CGRectMake (0, 0, image.size.width, image.size.height);

CGLayerRef backLayer = CGLayerCreateWithContext (context, image.size, NULL);
CGContextRef backContext = CGLayerGetContext (backLayer);

CGContextDrawImage(backContext, backRect, image.CGImage);

你能告诉我这段代码有什么问题吗?

图像是用相机拍摄的UIImage。

是的,图像就在那里。如果我用

替换上面的代码
UIGraphicsBeginImageContext(image.size);  
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; 

我看到了图像。但是我必须把它放在一个层中,因为它是一个精灵。

3 个答案:

答案 0 :(得分:1)

你并没有真正对你创建的图层做任何事情。您应该使用CGContextDrawLayerAtPoint()或CGContextDrawLayerInRect()或...将其添加到当前上下文中。

您可以添加以下内容:

CGContextDrawLayerInRect(context, backRect, backLayer);

CGContextDrawLayerAtPoint(context,CGPointZero,backLayer);

答案 1 :(得分:1)

请注意,CGLayer与CALayer不同。 CALayer可以通过Core Animation进行动画处理,其中CGLayer只是方便将静态2-D核心图形绘图组合在一起。因为你把它称为精灵,我假设你想要围绕这个动画,所以CALayer将是更好的选择。

我建议您阅读Core Animation Programming Guide,尤其是section on providing layer content。 CALayers在动画方面会给你非常好的表现,因为它们是GPU加速的,不需要每帧重绘。 Core Graphics不会为您提供接近动画可接受性能的任何地方,因为重绘是一项昂贵的操作。

答案 2 :(得分:0)

  • 您确定图像是在正确的位置找到的吗?
  • 此iphone支持图像格式和颜色编号吗?
  • 图像不会被其他绘图调用透支?
  • 在最坏的情况下,未检测到的内存泄漏导致图像被内存覆盖