2

私は本当に奇妙な問題を抱えています.私のiPhoneアプリでは、ユーザーはカメラロールから画像を開くことができます.私の例では、1920 x 1080 px (72 dpi)の壁紙です。

ここで、画像の幅を 1024 px などに変更したい場合:

+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    NSLog(@"New image has w=%f, h=%f", newImage.size.width, newImage.size.height);
    return newImage;
}

ログ メッセージで、幅が 1024 で高さが 576 であることを確認できます。すべて問題ありません。

しかし今、画像を Documents フォルダーに保存します。

NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/%@.jpg", uniqueId]];
[UIImageJPEGRepresentation(originalImage, 1.0) writeToFile:jpgPath atomically:YES];

そして今、非常に奇妙な効果:
a) Retina シミュレーターを使用すると、「/Users/[...]/Library/Application Support/iPhone Simulator/5.1/Applications/[...]/Documents/」に保存された画像" のサイズは 1.5 MB で、解像度は 144(!) dpi で 2048 x 1152 ピクセルです。

b) 通常のシミュレーターを使用すると、サイズは 441 KB で、解像度は 72 dpi で 1024 x 768 px です。

UIImageを72 dpiで保存するにはどうすればよいですか?

4

1 に答える 1

3

あぁぁぁぁぁぁ!!!

わかった...

UIGraphicsBeginImageContextWithOptions(newSize, NO, 1.0);

「0.0」ではなく「1.0」!

3 番目のパラメーターは、ビットマップに適用する倍率です。値 0.0 を指定すると、倍率はデバイスのメイン画面の倍率に設定されます。

于 2012-10-20T14:59:51.680 に答える