Заснетото неподвижно изображение се разтяга с рамката Cocoa Touch AVFoundation

Трябва да заснема неподвижно изображение с рамката на Cocoa Touch 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

Изходното изображение е разтегнато. Как да коригирам разтегнатото изображение? Всички предложения трябва да бъдат оценени.


person user1190178    schedule 29.08.2013    source източник


Отговори (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)];

Накрая запишете новото изображение във фотоалбум. Новото изображение не се разтяга.

person user1190178    schedule 30.08.2013