2011-11-11 6 views
4

UIImageをフレームのサイズに合わせてスケールすることはできますか?大きな画像を撮り、小さなボックスに「強制」します。イメージをフレームに合わせる方法は?

例に、この質問の

+0

どのフレーム?どうか明らかにしてください。 –

答えて

4

、そのことができますMarkによって説明されているように、UIImageViewのUIViewContentModeを変更することによって、次のUIImage拡張子(これはsourceから取得)を使って実際の画像のサイズを変更することができます

- (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; 
} 
2

可能デュープてください:私も受け入れ答えのテキストをコピーします How to scale a UIImageView proportionally?

を。フレームがuiviewであると仮定します。

imageView.contentMode = UIViewContentModeScaleAspectFit; はあなたが望むことを行います。ドキュメントから

、ここでは他のスケーリングオプションが

UIViewContentMode 

Specifies how a view adjusts its content when its size changes. 
typedef enum { 
    UIViewContentModeScaleToFill, 
    UIViewContentModeScaleAspectFit, 
    UIViewContentModeScaleAspectFill, 
    UIViewContentModeRedraw, 
    UIViewContentModeCenter, 
    UIViewContentModeTop, 
    UIViewContentModeBottom, 
    UIViewContentModeLeft, 
    UIViewContentModeRight, 
    UIViewContentModeTopLeft, 
    UIViewContentModeTopRight, 
    UIViewContentModeBottomLeft, 
    UIViewContentModeBottomRight, 
} UIViewContentMode; 

リンゴのドキュメントここにある:あなたが実際にだけ表示枠を変更するUIImageを変更していない話をしている場合は http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIImageView_Class/Reference/Reference.html

+0

彼はUIImageの話をしています - これは画像を拡大するのではなく、ビューによって描画されるものだけです –

関連する問題