2012-05-11 2 views
2

私はちょっとグーグルで行きましたが、解決策を見つけることができませんでした。ここに私の問題があります。 UIImageを特定のサイズ、つまり幅と高さが両方の2の累乗になるようなサイズにリサイズする必要があります。私の画像はカメラから来ているので、寸法は2の累乗ではありません。正しい画像を維持しながら、画像全体を維持する必要があります。つまり、アスペクトフィッティングモードです。私はUIImageのサイズを変更する方法を知っていますが、イメージのサイズを変更する方法と、適切な全体的なイメージサイズを維持するために、適切なアスペクトを保持しながら、上下に空白を追加する方法を理解することはできません。誰かがこれについての洞察を持っていますか?uimimageをサイズ変更して空白を追加

ところで、ここに私の現在のサイズ変更コードは

- (UIImage *) resizeImage:(UIImage *)initialImage 
{ 
    CGSize newSize = CGSizeMake(256, 256); 
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0); 
    [initialImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();  
    UIGraphicsEndImageContext(); 
    return newImage; 
} 

(ジャストサイズが変更さ)であり、私はthisブログを使用してみましたが、私はコンテンツモードのUIViewContentModeScaleAspectFitを指定したとき、それは私に適切な画像サイズを与えません。そうする

答えて

3

イージーな方法は、

、UIImageViewにあなたのイメージを入れて空白や白backgournd色で希望のサイズを設定し、その後、UIViewContentModeScaleAspectFitモードに

を設定し、その後UIImageにそれを回しています

UIImageView *imageView = [[UIImageView alloc] initWithFrame:yourFrame]; 
imageView.image = yourImage; 
imageView.contentMode = UIViewContentModeScaleAspectFit ; 
imageView.backgroundColor = [UIColor whiteColor]; 

UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, imageView.opaque, 0.0); 
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
//the image you want 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

は、あなたが持っているソリューションは、ほとんどがすでにあること

0

を得ました。 [initialImage drawInRect:]のrectを変更するだけです。ソリューションは次のようになります(テストされていません):

CGSize size = initialImage.size; 
CGFloat max = (size.width > size.height) ? size.width : size.height; 
CGSize newSize = CGSizeMake(size.width * newSize.width/max, size.height * newSize.height/max); 
CGRect rect = CGRectMake((newSize.width-newSize.width)/2.0, 
         (newSize.height-newSize.height)/2.0, 
         newSize.width, newSize.height); 
[initialImage drawInRect:rect]; 
関連する問題