Размер изображения UIImagePickerController - PullRequest
1 голос
/ 04 июля 2011

Я использую UIImagePickerController в своем приложении, чтобы делать снимки, и я использую свои собственные элементы управления, что означает, что для свойства UIImagePickerController showsCameraControls установлено значение NO, и у меня есть UIButton внутри overlayView, который снимает изображения.Теперь я заметил, что изображение, которое я сохраняю в библиотеке фотографий, на самом деле показывает большую область, чем изображение в режиме предварительного просмотра.У кого-нибудь еще была такая же проблема?Любое решение, чтобы получить изображение, показывающее, что было в предварительном просмотре?

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

после получения объекта изображения из палитры измените размер изображения, затем обрежьте

Мне нужно то же самое - в моем случае, чтобы выбрать размер, который подходит после масштабирования, а затем обрезать каждый конец, чтобы подогнать остальные к ширине. (Я работаю в альбомной ориентации, поэтому, возможно, не заметил каких-либо недостатков в портретном режиме.) Вот мой код - это часть категории UIImage. Размер цели в моем коде всегда установлен на полный размер экрана устройства.

@implementation UIImage (Extras)

#pragma mark -
#pragma mark Scale and crop image

- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize
{
UIImage *sourceImage = self;
UIImage *newImage = nil;    
CGSize imageSize = sourceImage.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;
CGFloat targetWidth = targetSize.width;
CGFloat targetHeight = targetSize.height;
CGFloat scaleFactor = 0.0;
CGFloat scaledWidth = targetWidth;
CGFloat scaledHeight = targetHeight;
CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

if (CGSizeEqualToSize(imageSize, targetSize) == NO) 
    {
    CGFloat widthFactor = targetWidth / width;
    CGFloat heightFactor = targetHeight / height;

    if (widthFactor > heightFactor) 
        scaleFactor = widthFactor; // scale to fit height
    else
        scaleFactor = heightFactor; // scale to fit width
    scaledWidth  = width * scaleFactor;
    scaledHeight = height * scaleFactor;

    // center the image
    if (widthFactor > heightFactor)
        {
        thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
        }
    else 
        if (widthFactor < heightFactor)
            {
            thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
            }
    }   

UIGraphicsBeginImageContext(targetSize); // this will crop

CGRect thumbnailRect = CGRectZero;
thumbnailRect.origin = thumbnailPoint;
thumbnailRect.size.width  = scaledWidth;
thumbnailRect.size.height = scaledHeight;

[sourceImage drawInRect:thumbnailRect];

newImage = UIGraphicsGetImageFromCurrentImageContext();
if(newImage == nil) 
    NSLog(@"could not scale image");

//pop the context to get back to the default
UIGraphicsEndImageContext();
return newImage;
}
1 голос
/ 05 июля 2011

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

Преобразования, применяемые к интерфейсу средства выбора изображений (с помощью cameraViewTransform), не отражаются на снятом изображении.Например, если вы пытаетесь увеличить (увеличить или уменьшить) масштабирование, вам необходимо применить то же самое (преобразовать) к полученному изображению, чтобы сохранить изображение в интерфейсе средства выбора изображений и фактическое сохраненное изображение в синхронизации.
Также вам нужно будет учитывать ориентацию изображения при применении преобразований.

...