【发布时间】:2014-04-26 15:30:41
【问题描述】:
我有一个裁剪图像 (mainImage),允许用户在使用手指的基础上进行绘制。屏幕 A. 上的红色锯齿形显示手指绘制的部分。现在,使用下面的代码,新绘制的图像上下文(红色之字形)被推入与裁剪图像相同的边界,我最终得到一个扭曲的之字形(屏幕截图 B.)。您可以看到红色之字形是如何被推入裁剪后的 (mainImage) 的边界的。
我想要实现的是一个图像,它结合了 mainImage 和 drawImage 的两个上下文,而不会扭曲任何一张照片的比例。因此,只有与 mainImage 重叠的红色之字形部分将在新的上下文中绘制,如屏幕截图 C 所示。(我想要的结果的照片处理图像)。现在,commitDrawingWithOpacity: 方法的结果是屏幕截图 B。我想要屏幕截图 C 的结果。
我尝试了 CGContextClipToRect、CGContextClipToMask,还尝试为绘图图像创建一个新的矩形,但到目前为止还没有成功。我已经被这个问题困扰了将近一个月(自学),这是我在将我的应用程序提交给苹果之前需要做的最后一件事。因此,我们将不胜感激任何帮助。这是我正在使用的代码的链接https://github.com/dblapps/DAScratchPad
这是每个的大小:
drawImage.size = (width=320, height=568) // iPhone 5 屏幕尺寸
mainImage.size = (width=260, height=800) // 裁剪图像的大小
我的 imageView 设置为宽高比。
- (void) commitDrawingWithOpacity:(CGFloat)opacity {
UIGraphicsBeginImageContext(mainImage.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextScaleCTM(ctx, 1.0f, -1.0f);
CGContextTranslateCTM(ctx, 0.0f, -mainImage.size.height);
CGRect rect = CGRectMake(0.0f, 0.0f, mainImage.size.width, mainImage.size.height);
if (mainImage != nil) {
CGContextDrawImage(ctx, rect, mainImage.CGImage);
}
CGContextSetAlpha(ctx, opacity);
CGContextDrawImage(ctx, rect, drawImage.CGImage);
mainImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.layer.contents = (id)mainImage.CGImage;
drawLayer.contents = nil;
drawImage = nil;
}
使用函数 AVMakeRectWithAspectRatioInsideRect 我已经能够为我的 mainImage 获得正确的大小比,但仍然没有让任何东西正常工作。
下面是我想要达到的结果的 Photoshop 截图。屏幕截图 B(上图)是我使用当前代码得到的结果。
【问题讨论】:
标签: ios crop cgimage cgcontextdrawimage