Захватить неподвижное изображение можно с помощью каркаса Cocoa Touch AVFoundation
Я должен сделать неподвижное изображение с помощью какао-основы AVFoundation, но я обнаружил, что захваченное изображение растягивается. Я настроил captureSession так:
[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
Результат вывода изображения растягивается. Как исправить растянутое изображение? Любые предложения следует ценить.
1 ответ
Решение
Я думаю, что я не должен рисовать изображение с размером экрана. Я должен рисовать изображение с размером изображения. Я определил новый метод для масштабирования изображения до новой ширины
+(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)];
Наконец, запишите новое изображение в фотоальбом. Новое изображение не растягивается.