Немедленно получить UIImage после UIImagepickercontroller - (void) takePicture - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть cameraOverlay с собственной кнопкой камеры, и я использую метод takePicture, когда они нажимают кнопку камеры и используют метод делегата.

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo: (NSDictionary *)info{
    [CommonClass AddToStack:@"ReviewController:imagePickerController"];
    PhotoOverlay *overlay = (PhotoOverlay*)picker.cameraOverlayView;
    [overlay setupImage:[info objectForKey:UIImagePickerControllerOriginalImage]];
}

, метод setupImage: просто устанавливает изображениедля UIImageView, который у меня есть на оверлее

, проблема заключается в том, что между takePicture и методом делегата imagepicker существует разрыв в 0,3 секунды, поэтому он выглядит действительно странно.Я видел, как приложения сразу переходят от нажатия камеры к окончательному виду при использовании пользовательского наложения.

кто-нибудь сталкивался с этим?

1 Ответ

1 голос
/ 11 февраля 2012

Чтобы получить мгновенное изображение, сделайте снимок экрана с экрана и сначала используйте это изображение, затем вызовите takePicture и замените его на снимок экрана, когда он будет готов (снимок экрана имеет более низкое разрешение, чем фактическое изображение ).

Вот мой фрагмент:

-(void)CameraPressedTake
{
extern CGImageRef UIGetScreenImage();
PhotoOverlay *overlay = (PhotoOverlay*)cameraPicker.cameraOverlayView;

CGImageRef cgoriginal = UIGetScreenImage();

float width = 320.0;
float height = 480.0-[overlay myHeight];
//if it's retina...
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2) {
    width = 2*width;
    height = 2*height;
}
CGImageRef cgimg = CGImageCreateWithImageInRect(cgoriginal, CGRectMake(0, 0, width, height));            
UIImage *viewImage = [UIImage imageWithCGImage:cgimg];
[overlay setupImage:viewImage];
CGImageRelease(cgoriginal);                
CGImageRelease(cgimg);
[cameraPicker takePicture];
}
...