在上下文中绘制图像时获取无效上下文

时间:2013-06-29 20:38:39

标签: ios cocoa-touch uiimage quartz-graphics cgcontext

我正在设计一个界面,用户可以使用手势缩放和旋转图像,然后在完成后将图像与背景图像合并。我在将旋转图像与背景合并时遇到问题。

- (void) donePlacingPicture
{
    UIImage * scaledTopImg = [self.photoImage.image imageByScalingProportionallyToSize:self.photoImage.frame.size];

    UIGraphicsBeginImageContext(scaledTopImg.size);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(ctx, scaledTopImg.size.width * 0.5f, scaledTopImg.size.height  * 0.5f);
    CGFloat angle = atan2(self.photoImage.transform.b, self.photoImage.transform.a);
    CGContextRotateCTM(ctx, angle);
    [scaledTopImg drawInRect:CGRectMake(- scaledTopImg.size.width * 0.5f, -(scaledTopImg.size.height  * 0.5f), scaledTopImg.size.width, scaledTopImg.size.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    UIGraphicsBeginImageContext(self.MainImage.image.size);
    [self.MainImage.image drawInRect:CGRectMake(0, 0, self.MainImage.image.size.width, self.MainImage.image.size.height)];
    [newImage drawInRect:CGRectMake(self.photoImage.frame.origin.x, self.photoImage.frame.origin.y, newImage.size.width, newImage.size.height)];
    self.MainImage.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext(); 

    self.photoImage.hidden = TRUE;
    self.photoImage = nil;
}

这给了我以下错误

CGContextSaveGState: invalid context 0x0
CGContextSetBlendMode: invalid context 0x0
CGContextSetAlpha: invalid context 0x0
CGContextTranslateCTM: invalid context 0x0
CGContextScaleCTM: invalid context 0x0
CGContextDrawImage: invalid context 0x0
CGContextRestoreGState: invalid context 0x0

有时候这个功能会起作用,图像会以旋转的形式添加,但是比例会稍微偏离,角落会被裁剪掉,而其他时候也没有任何影响,我会得到这些错误。我相信错误来自

[newImage drawInRect:CGRectMake(self.photoImage.frame.origin.x, self.photoImage.frame.origin.y, newImage.size.width, newImage.size.height)];

导致图像上下文设置为nil,这会在

时抛出错误
self.MainImage.image = UIGraphicsGetImageFromCurrentImageContext();
达到

。当这些行中的任何一行被注释掉时,我都不会得到错误。

有没有人知道这些错误是什么意思,知道一个更好的方法来轮换一个视图,或者可以指向一个完成此操作的示例项目?

提前致谢,这是我第一篇关于stackoverflow的帖子。我意识到有很多类似于这个的问题,但没有一个问题在我的情况下非常有帮助。

0 个答案:

没有答案