6

Webサービスを使用して画像を取得し、すべての画像の解像度が異なるシナリオがあります。今、私の要件は、各画像の解像度が必要であり、それを使用してUIImageViewのサイズを定義し、画像がぼやけないようにすることです。

たとえば、326ピクセル/インチの場合の画像の解像度は、その画像のサイズがぼやけることなく完全に表現できるサイズである必要があります。

4

7 に答える 7

4
UIImage *img = [UIImage imageNamed:@"foo.png"];
CGRect rect = CGRectMake(0, 0, img.size.width, img.size.height);
UIImageView *imgView = [[UIImageView alloc] initWithFrame:rect];
[imgView setImage:img];
于 2012-05-04T11:30:09.017 に答える
3

画像サイズは解像度です。

あなたの問題は-網膜ディスプレイかもしれません!

Retinaディスプレイを確認し、UIImageViewの幅/高さを2倍小さくします(各UIImageViewピクセルがRetinaディスプレイ用の4つの小さいUIImageピクセルで構成されるようにします)。

Retinaディスプレイを確認する方法:

https://stackoverflow.com/a/7607087/894671

画像サイズを確認する方法(実際に画像をメモリにロードせずに):

NSString *mFullPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] 
                stringByAppendingPathComponent:@"imageName.png"];

NSURL *imageFileURL = [NSURL fileURLWithPath:mFullPath];


CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageFileURL, NULL); 

if (imageSource == NULL) 
{ 
    // Error loading image ... 
} 

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:NO], (NSString *)kCGImageSourceShouldCache, nil]; 

CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (CFDictionaryRef)options); 


NSNumber *mImgWidth;

NSNumber *mImgHeight;

if (imageProperties) 
{   
    //loaded image width
    mImgWidth = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth); 

    //loaded image height      
    mImgHeight = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight); 

    CFRelease(imageProperties); 
}

if (imageSource != NULL) 
{
    CFRelease(imageSource);
}

だから-例えば:

UIImageView *mImgView = [[UIImageView alloc] init];

[mImgView setImage:[UIImage imageNamed:@"imageName.png"]];

[[self view] addSubview:mImgView];


if ([UIScreen instancesRespondToSelector:@selector(scale)]) 
{
    CGFloat scale = [[UIScreen mainScreen] scale];

    if (scale > 1.0) 
    {
        //iphone retina screen
        [mImgView setFrame:CGRectMake(0,0,[mImgWidth intValue]/2,[mImgHeight intValue]/2)];
    }
    else
    {
        //iphone screen
        [mImgView setFrame:CGRectMake(0,0,[mImgWidth intValue],[mImgHeight intValue])];
    }
}

お役に立てば幸いです。

于 2012-05-13T17:11:31.867 に答える
2
 UIImage *oldimage = [UIImage imageWithContentsOfFile:imagePath];  // or you can set from url with NSURL  

CGSize imgSize = [oldimage size];

  imgview.frame = CGRectMake(10, 10, imgSize.width,imgSize.height);
[imgview setImage:oldimage];  

100%動作しています...。

于 2012-05-17T11:28:24.540 に答える
2

次のコードを使用して画像サイズを取得できます。したがって、最初にダウンロードした画像サイズを計算し、それに従って画像ビューを作成します。

UIImage *Yourimage = [UIImage imageNamed:@"image.png"];
CGFloat width = Yourimage.size.width;
CGFloat height = Yourimage.size.height;

うまくいけば、これはあなたを助けるでしょう..

于 2012-05-04T11:27:52.887 に答える
1

コンテンツモードプロパティを利用してUIImageViewに作業を任せ、画像のサイズ変更を行います。

表示する画像の最大サイズを表す静的なサイズ設定(「フレーム」プロパティ)を使用してUIImageViewを表示し、特定のサイズ要件(全体として)に対してそのフレーム内で画像のサイズを変更できるようにする必要があります。サイズ、アスペクト比など)。contentModeプロパティをマスターすることで、UIImageViewにさまざまなサイズの画像を処理するための手間のかかる作業を任せることができます。さまざまな設定があります。そのうちの1つはUIViewContentModeScaleAspectFitで、UIImageView内に収まるように必要に応じて画像を縮小します。画像が小さい場合は、中央に表示されます。あなたはあなたが望む結果を得るために設定で遊ぶことができます。

このアプローチでは、Retinaディスプレイに関連するスケーリングの問題に対処するために特別なことは何もする必要がないことに注意してください。

于 2012-05-14T00:41:07.940 に答える
1

この問題を解決するには、デバイスのディスプレイ解像度に注意を払う必要があります。

たとえば、iPhone4、iPhone4S、iPod 4th Genと同じ解像度 326ppiの画像があるため、@Nitと@Pekoが提案するソリューションを簡単に使用できます。ただし、他のデバイス(またはこれらのデバイスの解像度が異なる画像)の場合は、表示を改善するためにサイズを計算するために数学を適用する必要があります。

ここで、 260ppi(サイズW x H)の画像があり、それをiPhone4Sに表示したいとします。これは、1インチあたりに含まれる情報が、iPhoneの表示解像度よりも小さいため、画像サイズを小さくしてサイズを変更する必要があるためです。 326/260倍。したがって、使用するimageViewのサイズは次のようになります。

imageViewWidth = W*(260/326);

imageViewHeight = H*(260/326);

一般に:

resizeFactor = imageResolution/deviceDisplayResolution;
imageViewWidth = W*resizeFactor;
imageViewHeight = H*resizeFactor;

ここでは、imageViewで画像を設定してサイズを変更するときに、画像からピクセルを削除または追加しないことを検討しています。

于 2012-05-14T20:19:12.023 に答える
0

質問の本文で述べた要件に従って、UIImageViewのサイズを変更する必要はないと思います。

次のコード行を使用すると、画像をぼやけることなく完全に表現できます。

imageView.contentMode = UIViewContentModeScaleAspectFit;
于 2012-05-17T06:00:36.687 に答える