2013-08-29 4 views
0

Я должен захватить неподвижное изображение с помощью рамки AVFoundation с какао, но я обнаружил, что захваченное изображение будет растянуто. я настроил captureSession как эти:Захват неподвижного изображения растягивается с помощью рамки карандашного изображения AVFoundation

[self setPreviewLayer:[[AVCaptureVideoPreviewLayer alloc] initWithSession:[self captureSession]]]; 
self.captureSession.sessionPreset=AVCaptureSessionPresetHigh; 
[[self previewLayer] setVideoGravity:AVLayerVideoGravityResizeAspectFill]; 

И использовать эти код для захвата изображения:

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

    if(error) 
     NSLog(@"error=%@",error); 
    else 
    { 
     if (imageDataSampleBuffer != NULL) { 
      NSData *imageData=[AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer]; 
      UIImage *image=[[UIImage alloc] initWithData:imageData]; 

      CGRect screenRect = [[UIScreen mainScreen] bounds]; 
      CGFloat screenWidth = screenRect.size.width; 
      CGFloat screenHeight = screenRect.size.height; 
      CGSize screenSize=CGSizeMake(screenWidth, screenHeight); 
      NSLog(@"screen.width=%f,screen.height=%f",screenWidth,screenHeight); 
      UIGraphicsBeginImageContextWithOptions(screenSize, NO, 0.0f); 
      // This is where we resize captured image 
      [(UIImage *)image drawInRect:CGRectMake(0, 0, screenWidth, screenHeight)]; 
      CGSize imageSize=[ImageUtility getImageSize:image]; 
      NSLog(@"image.width=%f,image.height=%f",imageSize.width,imageSize.height); 
      // Save the results directly to the image view property 
      UIImage *toSaveImage=UIGraphicsGetImageFromCurrentImageContext(); 
      imageSize=[ImageUtility getImageSize:toSaveImage]; 
      NSLog(@"combine.width=%f,combine.height=%f",imageSize.width,imageSize.height); 
      UIGraphicsEndImageContext(); 
      UIImageWriteToSavedPhotosAlbum(toSaveImage, nil, nil, nil); 
     } 
    } 
     }]; 
} 

Этот вывод результата:

013-08-29 09:30:06.182 WatermarkCamera[6882:907]  screen.width=320.000000,screen.height=480.000000 
2013-08-29 09:30:07.208 WatermarkCamera[6882:907] image.width=1280.000000,image.height=720.000000 
2013-08-29 09:30:07.238 WatermarkCamera[6882:907] combine.width=640.000000,combine.height=960.000000 

Результат вывода изображения stretched.How в исправить растянутое изображение? Любые предложения должны быть оценены.

ответ

0

Я думаю, что я не должен рисовать изображение с размером экрана. Я должен нарисовать изображение с размером изображения. я определил новый метод для масштабирования изображения на новую ширину

+(UIImage*)imageWithImage: (UIImage*) sourceImage scaledToWidth: (float) i_width; 

Теперь я назвал этот метод

UIImage *newImage=[ImageUtility imageWithImage:image scaledToWidth:screenWidth]; 
[newImage drawInRect:CGRectMake(0, 0, newImage.size.width, newImage.size.height)]; 

Наконец написать новый образ на фото album.The новое изображение не растягивается.

Смежные вопросы