2

私は1つのアプリケーションを開発しています。その中で、サーバーから画像を取得しています。そして、画像を の背景として使用したいと思いますUIView。そして、その画像を uiview の背景として直接使用すると、UIView読み込みが非常に遅くなります。その画像を背景として設定する前にUIView、画像のサイズを確認し、画像のサイズを小さくしたいと思います。画像のサイズを調べて変更する方法を教えてください。以下のコードを使用して、画像を背景として設定していますUIView

 UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
 self.view.backgroundColor = [UIColor colorWithPatternImage:image];

drawrect メソッドの実行には時間がかかります。

4

4 に答える 4

2

UIImageこれは、プログラムでサイズを変更するためにカテゴリまたはヘルパー クラスに入れることができる関数です。このサイトのどこかで見つけましたが、正確な投稿は今のところ見つかりません。

この処理には時間がかかることに注意してください。同じイメージを今後使用する際にパフォーマンスを向上させたい場合は、これを 1 回だけ実行するのが理想的です。

ここに行きます:

+ (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize withOriginalImage:(UIImage *)origin {

    UIImage *sourceImage = origin;
    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;
        else
            scaleFactor = heightFactor;

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


    // this is actually the interesting part:

    UIGraphicsBeginImageContext(targetSize);

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

    [sourceImage drawInRect:thumbnailRect];

    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

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

    return newImage ;
}

次の方法で呼び出すことができます。

UIImage *mySmallImage = [ImageHelper imageByScalingProportionallyToSize:CGSizeMake(128,128) withOriginalImage:(UIImage *)myLargeImage];
于 2013-04-26T09:55:51.663 に答える
0

以下のコードでこれを解決しました。それがあなたに役立つことを願っています:

CGFloat ratio;  

if (img.size.width > 500 || img.size.height > 500) //Checking for image is higher then 500 or not
{
    if (img.size.width > img.size.height)
    {
        ratio = 500 / img.size.width;

    }
    else
    {
        ratio = 500 / img.size.height;

    }

    CGSize imageSize = CGSizeMake(img.size.width * ratio,img.size.height * ratio);
    UIGraphicsBeginImageContext(imageSize);
    CGRect imageRect = CGRectMake(0.0, 0.0, imageSize.width, imageSize.height);

    [img drawInRect:imageRect];
    img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext(); 
于 2013-09-04T13:13:14.737 に答える