1

私のアプリはカメラから撮った画像を扱います。これらの画像のサイズをサムネイルサイズに変更して、テーブルビューのセル内に表示できるようにしたいと思います。

「オンザフライ」でのサイズ変更はかなり遅いように思われるため、ユーザーがアプリにインポートした時点でサイズを変更し、テーブルビューなどのサムネイルを使用して、フルサイズとサムネイルの両方をビジネスオブジェクトに保存することを計画していました。

これは私がサムネイルを生成するために使用するコードです:

#import "ImageUtils.h"

@implementation ImageUtils

+(UIImage*) generateThumbnailFromImage:(UIImage*)theImage
{
    UIImage * thumbnail;
    CGSize destinationSize = CGSizeMake(100,100);

    UIGraphicsBeginImageContext(destinationSize);
    [theImage drawInRect:CGRectMake(0,0,destinationSize.width, destinationSize.height)];
    thumbnail = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return thumbnail;
}

@end

これは画像のサイズを正しく変更し、テーブルの応答性を大幅に向上させるように見えますが、画像のスケーリングはオフになっています。

上記は100*100のUIImageを作成しますが、AspectFitまたはAspectFillアプローチを使用するように強制するにはどうすればよいですか?

テーブルセルにあるUIImageViewは100*100なので、画像を歪ませずに、それに合わせて画像のサイズを変更する必要があります。

どんなポインタも素晴らしいでしょう!

4

2 に答える 2

3

これは古いスレッドだと思いますが、これに遭遇した場合は、iOS6にもっと簡単な方法があります。Appleのドキュメントで次のことを見つけるまで、このソリューションを使おうとして多くの時間を失いました。

次のいずれかを使用します。

+ (UIImage *)imageWithCGImage:(CGImageRef)imageRef 
scale:(CGFloat)scale
orientation:(UIImageOrientation)orientation

また

+ (UIImage *)imageWithCIImage:(CIImage *)ciImage
scale:(CGFloat)scale
orientation:(UIImageOrientation)orientation

これを使用して「image」という名前のUIImageからサムネイルを作成する場合は、次の1行のコードを使用できます。

UIImage *thumbnail = [UIImage imageWithCGImage:image.cgImage
scale:someScale
orientation:image.imageOrientation];

1より大きい数字は画像を縮小し、1より小さい数字は画像を拡大することがわかりました。基になるサイズプロパティの分母としてスケールを使用する必要があります。

必要なフレームワークをインポートしてください!

于 2013-04-12T01:48:36.023 に答える
0

入力:

imageSize // The image size, for example {1024,768}
maxThumbSize // The max thumbnail size, for example {100,100}

擬似コード:

thumbAspectRatio = maxThumbSize.width / maxThumbSize.height
imageAspectRatio = imageSize.width / imageSize.height

if ( imageAspectRatio == thumbAspectRatio )
{
    // The aspect ratio is equal
    // Resize image to maxThumbSize
}
else if ( imageAspectRatio > thumbAspectRatio )
{
    // The image is wider
    // Thumbnail width: maxThumbSize.width
    // Thumbnail height: maxThumbSize.height / imageAspectRatio
} 
else if ( imageAspectRatio < thumbAspectRatio )
{
    // The image is taller
    // Thumbnail width: maxThumbSize.width * imageAspectRatio
    // Thumbnail height: maxThumbSize.height
} 
于 2012-06-20T09:32:31.013 に答える