CoreGraphics和CGImageCreateWithImageInRect的方向和原点

时间:2011-11-07 19:23:06

标签: ios core-graphics uiinterfaceorientation uiimageorientation

我正在使用CGImageCreateWithImageInRect裁剪相机拍摄的照片。 iPhone(和照片图像)的方向是肖像,我的理解是CGImageCreateWithImageInRect期望原点位于手机的左下角,当它在肖像中时。换句话说,当你向左上角移动时,原点应该从坐标0,480和y增量开始,并且x保持不变。

然而,令我惊讶的是,我必须移动x坐标,以便以下代码正常工作。 x原点必须从右上角开始,y保持不变。看看CGImageCreateWithImageInRect在线的其他用法,在这里,我没有看到任何代码来缓解我遇到的问题所以我很难过为什么下面的代码仅在原点从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;

}

1 个答案:

答案 0 :(得分:2)

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

来自AV Foundation guide

  

你传递一个CGPoint,其中{0,0}代表图片区域的左上角,而{1,1}代表横向模式的右下角,右边的主页按钮 - 即使设备是在肖像模式。

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