2013-06-28 3 views
0

Я разрабатываю приложение, в котором пользователи нажимают изображения и загружают их. В моем приложении есть кнопка, и при нажатии на нее открывается режим камеры. Пользователь может щелкнуть изображение и просмотреть предварительный просмотр. В предварительном просмотре изображение выглядит хорошо, и оно занимает весь экран. Позже я должен отобразить это изображение в UIImageView шириной 110 и высотой 111. Когда я показываю это, изображение искажается и обрезается по краям. Моя основная цель - поддерживать соотношение сторон.Соотношение сторон с изменением размера

Я пробовал это сделать.

- (void)displayCapturedImage 
{ 
//[self.imageView setImage:self.capturedImage]; 
    CGSize smallSize = CGSizeMake(110, 111); 
    [self.imageView setImage:[self imageWithImage:self.capturedImage scaledToSize:smallSize]]; 

} 

- (UIImage*)imageWithImage:(UIImage*)image 
      scaledToSize:(CGSize)newSize; 
{ 
    UIGraphicsBeginImageContext(newSize); 
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return newImage; 
} 

но это не сработало для меня. Изображение по-прежнему искажено.

ответ

1

Вам необходимо рассчитать коэффициент масштабирования самостоятельно. Определите, насколько меньше должно быть изображение, и примените его как к ширине, так и по высоте.

Что-то вроде

float widthFactor = targetWidth/width; 
      float heightFactor = targetHeight/height; 

      if (widthFactor < heightFactor) 
       scaleFactor = widthFactor; 
      else 
       scaleFactor = heightFactor; 

      scaledWidth = width * scaleFactor; 
      scaledHeight = height * scaleFactor; 

      if (widthFactor < heightFactor) 
       thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 

      else if (widthFactor > heightFactor) 
       thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;