使用CGRect裁剪图像

时间:2013-08-19 10:07:28

标签: ios objective-c uiimage camera-overlay

我一直在努力做到这一点。我有相机覆盖。我想让我的最终图像成为可从内置相机中查看的图像的一部分。 我所做的是使CGRect的尺寸等于相机中的方形。然后我尝试使用此功能裁剪它。

- (UIImage *)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
{
    CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);

    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);

    return croppedImage;
}

我这样称呼它

CGRect rect = CGRectMake(10, 72, 300, 300);

UIImage *realImage = [self imageByCropping:[self.capturedImages objectAtIndex:0] toRect:rect];

我得到的是质量差的图像,方向错误。

:: EDIT ::

根据Nitin的回答,我可以裁剪屏幕的正确部分,但问题是在摄像机视图后面的视图“确认视图”。我怀疑这是因为Nitin的代码使用了

UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();

并且因为ViewController发生了所有这一切,因为确认视图的视图控制器是执行此代码的Controller。我将尝试用小地图解释这个

CameraOverlay.xib(它使用此xib创建叠加层)< ===== CameraOverlayViewController ---------> ConfirmationView

因此,当第一次引发ViewController时(Tab栏上的按钮),它会打开相机(UIImagePickerController)并在其上面叠加。然后,一旦用户单击图像,图像将显示在ConfirmationView上。

我认为发生的事情是什么时候 UIGraphicsBeginImageContextWithOptions(self.view.frame.size, YES, 1.0); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();  这些行正在执行,当时的View是ConfirmationView。

注意:我在

中调用该函数

(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info方法。

1 个答案:

答案 0 :(得分:0)

参考Drawing and printing Guide

CoreGraphics和UIKit之间的默认坐标系不同。我认为你的问题是因为这个事实。

使用这些可以帮助您解决问题

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context , 0.0, rect.size.height);
CGContextScaleCTM(context , 1.0, -1.0);