我正在设计一个界面,用户可以使用手势缩放和旋转图像,然后在完成后将图像与背景图像合并。我在将旋转后的图像与背景合并时遇到问题。
- (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 上的第一篇文章。我意识到有多个与此类似的问题,但没有一个对我的情况很有帮助。