2013-08-19 2 views
2

Я пытаюсь сделать это с навсегда. У меня есть наложение камеры. Я хочу, чтобы мое окончательное изображение было частью изображения, видимого из встроенной камеры. То, что я сделал, это сделать CGRect с размерами, равными квадрату в камере. Затем я попытался обрезать его, используя эту функцию.Обрезать изображение с помощью 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 ::

С ответом Нитин, я могу обрезать правильную часть экрана, но проблема в том, что обрезает вид, что следует вид камеры, "Точка зрения подтверждения. Я подозреваю, что это потому, что код Нитин использует

UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();

и потому, что ViewController, в котором все это происходит потому, что View Controller для подтверждения View является контроллер, в котором этот код выполняется. Я попытаюсь объяснить это с маленькой картой

CameraOverlay.xib (он использует этот XIB для создания наложения) < ===== CameraOverlayViewController ---------> ConfirmationView

Так когда сначала вызывается ViewController (кнопка на панели вкладок), он открывает камеру (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 метода.

ответ

0

Refer Drawing and printing Guide.

Система координат по умолчанию отличается от CoreGraphics и UIKit. Я думаю, что ваша проблема связана с этим фактом.

Используя это может помочь вам решить проблему

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

Спасибо за ваш ответ. Я думаю, что этот код будет иметь ту же проблему, что и у меня с ответом Нитина. Пожалуйста, не могли бы вы взглянуть на EDIT? – nupac