0

我有一个带有自己的相机按钮的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 设置图像

问题在于,和 imagepicker 委托方法之间有 0.3 秒的间隔,takePicture所以看起来很奇怪。当使用自定义覆盖时,我已经看到应用程序立即从按下相机转换到最终视图。

有没有人遇到过这个?

4

1 回答 1

1

获取即时图像的方法是先对屏幕进行屏幕截图并使用该图像,然后在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];
}
于 2012-02-11T01:58:11.100 回答