2014-09-26 3 views
0

카메라 (iOS 7,)를 사용하여 사진을 찍어 사각형으로 자릅니다. 나는 다음 코드에서 얻을 수있는 기본 자르기 기능에 만족한다.iOS 사진 찍기 카메라로 찍기

imagePickerController = [[UIImagePickerController alloc] init]; 
    imagePickerController.delegate = self; 
    imagePickerController.mediaTypes = @[(NSString *) kUTTypeImage]; 
    imagePickerController.allowsEditing = YES; 
    UIImage *image = info[UIImagePickerControllerEditedImage] 

나는 내가 가진 이미지 위에 제곱 된 오버레이를 제공한다. 확대하면 이미지를 조금 옮길 수 있습니다. 그러나 나는 이미지 위로 자르기 사각형을 이동하기 위해 이미지를 위아래로 (줌없이) 움직일 수 없다는 것에 놀랐다. 그렇게하려고하면 원래 위치로 되돌아옵니다. 내가 뭘 놓치고 있니? 아니면이 기능이 누락 되었습니까?

여기 많은 질문에서 대부분은 실망스러운 '맞춤법으로 수행되어야합니다'라고 대답합니다.

+0

그래, 난 내 응용 프로그램에서 같은 상황이이 답변 –

답변

0

(UIImagePickerController를 다시 구현하지 않고) 가장 쉬운 방법은 다음과 같습니다. 먼저, 오버레이를 사용하여 카메라 필드를 사각형으로 봅니다. 여기에 (당신은 아이폰 5에 대한 작동하도록 업데이트해야 할 것입니다) 3.5 "화면에 대한 예입니다 :

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; 
imagePickerController.sourceType = source; 

if (source == UIImagePickerControllerSourceTypeCamera) { 
    //Create camera overlay 
    CGRect f = imagePickerController.view.bounds; 
    f.size.height -= imagePickerController.navigationBar.bounds.size.height; 
    CGFloat barHeight = (f.size.height - f.size.width)/2; 
    UIGraphicsBeginImageContext(f.size); 
    [[UIColor colorWithWhite:0 alpha:.5] set]; 
    UIRectFillUsingBlendMode(CGRectMake(0, 0, f.size.width, barHeight), kCGBlendModeNormal); 
    UIRectFillUsingBlendMode(CGRectMake(0, f.size.height - barHeight, f.size.width, barHeight), kCGBlendModeNormal); 
    UIImage *overlayImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    UIImageView *overlayIV = [[UIImageView alloc] initWithFrame:f]; 
    overlayIV.image = overlayImage; 
    [imagePickerController.cameraOverlayView addSubview:overlayIV]; 
} 

imagePickerController.delegate = self; 
[self presentViewController:imagePickerController animated:YES completion:nil]; 

그런 다음 이런 식으로 뭔가에 다시 UIImagePickerController를에서 제곱에 작물을 사진을 얻을 후 :.!..

//Crop the image to a square 
CGSize imageSize = image.size; 
CGFloat width = imageSize.width; 
CGFloat height = imageSize.height; 
if (width != height) { 
    CGFloat newDimension = MIN(width, height); 
    CGFloat widthOffset = (width - newDimension)/2; 
    CGFloat heightOffset = (height - newDimension)/2; 
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(newDimension, newDimension), NO, 0.); 
    [image drawAtPoint:CGPointMake(-widthOffset, -heightOffset) 
        blendMode:kCGBlendModeCopy 
         alpha:1.]; 
    image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
} 

이 목표 C 코드입니다

+0

덕분에 내가이 솔루션이 제대로 작동 않습니다 구현하지 않았지만 그러나 나는했다 내가 놓친 기본 해결책이 있기를 바랐다. – marqram