3

AVCaptureSessionプリセットPhotoPresetを設定しました

self.session.sessionPreset = AVCaptureSessionPresetPhoto;

次に、ビューに新しいレイヤーを追加します

 AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
CALayer *rootLayer = [self.view layer];
[rootLayer setMasksToBounds:YES];
[previewLayer setFrame:[rootLayer bounds]];
[rootLayer addSublayer:previewLayer];

これまでのところ良いですが、画像をキャプチャしたいときは、以下のコードを使用します

 AVCaptureConnection *videoConnection = [self.stillImageOutput connectionWithMediaType:AVMediaTypeVideo];

[self.stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
 {

     [self.session stopRunning];

     NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
     UIImage *image = [[UIImage alloc] initWithData:imageData ];

     self.imageView.image = image; //IMAGEVIEW IS WITH THE BOUNDS OF SELF.VIEW
     image = nil;


 }];

画像をキャプチャすることは問題ありませんが、キャプチャされた画像はAVCaptureVideoPreviewLayer画面に表示されるものとは異なります。私が本当にやりたいのは、キャプチャされたものをAVCapturePreviewLayerレイヤーに表示されるように表示することです。どうすればこれを達成できますか?の境界に関して、キャプチャした画像のサイズを変更してトリミングするにはどうすればよいself.viewですか?

4

1 に答える 1

-1

これが役立つかどうかはわかりませんが、画像のトリミングについて話しているので、次のコードで ImagePickerView の画像をトリミングします。これが役立つかどうかはわかりません

- (void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info {
    self.lastChosenMediaType = [info objectForKey:UIImagePickerControllerMediaType];
    if ([lastChosenMediaType isEqual:(NSString *)kUTTypeImage]) {
        UIImage *chosenImage = [info objectForKey:UIImagePickerControllerEditedImage];
        UIImage *shrunkenImage = shrinkImage(chosenImage, imageFrame.size);
        self.imagee = shrunkenImage;
        selectImage.image = imagee;

    }     [picker dismissModalViewControllerAnimated:YES];
}


- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {    
    [picker dismissModalViewControllerAnimated:YES];
}

// function for cropping images you can do some changes in parameter as per your requirements  
static UIImage *shrinkImage(UIImage *original, CGSize size) {
    CGFloat scale = [UIScreen mainScreen].scale;
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    CGContextRef context = CGBitmapContextCreate(NULL, size.width * scale,
                                                 size.height * scale, 8, 0, colorSpace, kCGImageAlphaPremultipliedFirst);
    CGContextDrawImage(context,
                       CGRectMake(0, 0, size.width * scale, size.height * scale),
                       original.CGImage);
    CGImageRef shrunken = CGBitmapContextCreateImage(context);
    UIImage *final = [UIImage imageWithCGImage:shrunken];

    CGContextRelease(context);
    CGImageRelease(shrunken);   

    return final;
}
于 2013-04-23T12:27:03.637 に答える