iPhone:如何使用CGContextConcatCTM正确保存转换后的图像?

时间:2010-03-29 10:38:16

标签: iphone matrix uiimageview transform cgcontext

我正在制作一个从相机加载图像的iPhone应用程序,然后用户可以从库中选择第二个图像,移动/缩放/旋转第二个图像,然后保存结果。我在IB中使用两个UIImageViews作为占位符,然后在触摸/捏合时应用转换。

当我必须将两个图像保存在一起时,问题出现了。我使用第一张图片大小的矩形并将其传递给UIGraphicsBeginImageContext。然后我尝试使用CGContextConcatCTM,但我无法理解它是如何工作的:

CGRect rect = CGRectMake(0, 0, img1.size.width, img1.size.height); // img1 from camera
UIGraphicsBeginImageContext(rect.size); // Start drawing
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextClearRect(ctx, rect); // Clear whole thing
[img1 drawAtPoint:CGPointZero]; // Draw background image at 0,0
CGContextConcatCTM(ctx, img2.transform); // Apply the transformations of the 2nd image

但接下来我需要做什么? img2.transform矩阵中包含哪些信息? CGContextConcatCTM的文档不幸地帮助了我。 现在我试图通过使用三角函数计算点数和角度来解决它(在this answer的帮助下),但是由于转换就在那里,所以必须有一种更简单,更优雅的方法来做到这一点,对吗?

1 个答案:

答案 0 :(得分:0)

看看这个优秀的答案,你需要创建一个位图/图像上下文,绘制它,并获得结果图像。然后你可以保存它。 iOS UIImagePickerController result image orientation after upload