0

UIImage 1: サイズ 400x400 の @2x 修飾子を持つファイルからロードされるため、UIImage 1 はそのサイズを 200x200 として報告します

UIImage 2:サイズ 400x400 の @2x 修飾子なしのファイルからロードされるため、UIImage 2 はそのサイズを 400x400 として報告します。

次に、上記から2つの画像を作成し、それぞれに以下のコードを適用します

UIGraphicsBeginImageContextWithOptions(CGSizeMake(400,400), YES, 1.0);
[image drawInRect:CGRectMake(0, 0, 400, 400)];
UIImage *rescaledI = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

上記を考慮して、結果として得られる両方の画像の画質がまったく同じであると期待できますか? (200x200 の網膜画像を 400x400 の非網膜コンテキストに描画すると、網膜画像として読み込まれていない同じ画像を描画する場合と比べて品質が低下するかどうかを判断しようとしています)

4

2 に答える 2

1

現在の画像のサイズを返すだけです。

   UIImage *image1 = [UIImage imagedNamed:@"myimage.png"];
    //access width and height like this
    image1.size.width;
    image1.size.height;

UIGraphicsBeginImageContextWithOptions(CGSizeMake(image1.size.width,  image1.size.height), YES, 1.0);
[image drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];
UIImage *rescaledI = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

もちろん、image1をサイズを取得しようとしている画像に置き換える必要がある場合。一部の switch ステートメントまたは if ステートメントでうまくいくはずです。

サイズ/寸法/場所などをハードコーディングしないでください。画像のサイズを尋ねて、常にその情報を動的に取得する必要があります。その後、アプリケーションでハードコーディングされたサイズを見つける必要がなく、イメージのサイズを変更できます。

于 2013-04-04T13:56:47.323 に答える
1

画像は常に 400*400 ピクセルです。違いは、Retina ディスプレイでは 400*400 ピクセルがカバーするスペースが少なく、ちょうど半分 (200*200 コア グラフィックス ポイント) であることです。画像に変換を適用していない場合、画像はまったく同じままです。

記述したコードは、デバイスの倍率をオーバーライドして常に 1 (1 ピクセルから 1 ポイント) に設定しているため、イメージをそのままレンダリングします。Retina デバイスと非 Retina デバイスの両方で画像を同じ量の画面に表示する場合は、2 つの画像 (1 つは 2 倍の大きさ) を使用する必要があります。

于 2013-04-04T13:57:03.323 に答える