1

我正在使用CGImageCreateWithImageInRect相机裁剪图像。iPhone(和照片图像)的方向是人像,我的理解是CGImageCreateWithImageInRect,当以人像模式握住手机时,原点应该位于手机的左下角。换句话说,原点应该从坐标 0,480 开始,并且随着您向左上角上升,y 增量,并且 x 保持不变。

然而,令我惊讶的是,我必须移动 x 坐标,以使以下代码正常工作。x 原点必须从右上角开始,y 保持不变。查看其他CGImageCreateWithImageInRect在线和此处的 SO 用法,我没有看到任何代码可以缓解我遇到的问题,所以我很难理解为什么以下代码仅在原点从 0,0 移动到 320 时才有效, 0。

任何人都可以添加一些见解吗?谢谢!

- (UIImage *)crop:(CGRect)rect {
    CGImageRef croppedImageRef = CGImageCreateWithImageInRect([self CGImage], CGRectMake(rect.origin.y, [self size].width - rect.origin.x - rect.size.width, rect.size.height, rect.size.width));
    UIImage *croppedImage = [UIImage imageWithCGImage:croppedImageRef scale:self.scale orientation:[self imageOrientation]]; 
    CGImageRelease(croppedImageRef);
    return croppedImage;

}

4

1 回答 1

2

我认为这回答了我自己的问题:

来自AV Foundation 指南

您传递一个 CGPoint,其中 {0,0} 代表图片区域的左上角,{1,1} 代表横向模式下的右下角,主页按钮在右侧——即使设备处于纵向模式也适用.

因此,对于来自相机的所有图像,原点 (x=0, y=0) 似乎位于纵向左方向的右上角,对于 Core Graphics,它转换为 (y, -x)。

于 2011-11-09T22:05:09.020 回答