UIImage とメソッド drawInRect を正しく使用する方法について質問があります。
私はiPad 4、Xcodeバージョン6.1.1
、IOS8.1.2
を使用し、ARCを使用しましたが、ARCなしで試しました
だから、私は画像「1.jpg」を持っています。
画像のプロパティ:
寸法: 7500 x 8871 ピクセル
解像度: 72 ピクセル/インチ
色空間: RGB
アルファチャンネル:いいえ
元の画像「1.jpg」を再スケーリングする必要があります
私はこのコードを使用します:
UIImage *originalImage=[UIImage imageNamed:@"1.jpg"];
CGSize newSize=(CGSizeMake(4096, 4096));
originalImage=[self GetScaledImage : originalImage andSize: newSize];
//----スケーリング方法-------------------------------------//
-(UIImage *) GetScaledImage :(UIImage *) inputImage andSize :(CGSize) inputSize
{
UIImage *newImage=[[[UIImage alloc] initWithCGImage:inputImage.CGImage] autorelease];
if (newImage)
{
UIGraphicsBeginImageContext(inputSize);
[newImage drawInRect: CGRectMake(0, 0, inputSize.width, inputSize.height)];
newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
return newImage;
}
私の質問:
newSize を使用する場合: (4096, 4096)
UIImage *originalImage=[UIImage imageNamed:@"1.jpg"];
CGSize newSize=(CGSizeMake(4096, 4096));
現在のメモリ: 3.1 MB
originalImage=[self GetScaledImage : originalImage andSize: newSize];
現在のメモリ: 4.3 MB
そしてそれは正しく動作します
しかし、newSize: (3000, 4096) を使用すると
私はこれを持っています:
UIImage *originalImage=[UIImage imageNamed:@"1.jpg"];
CGSize newSize=(CGSizeMake(3000, 4096));
現在のメモリ: 3.1 MB
originalImage=[self GetScaledImage : originalImage andSize: newSize];
現在のメモリ: 52 MB
そしてそれは正しく動作しません
そして魔法: newSize: (4096,3000) を使用すると、それも正しく動作しますが、 (3000,4096) は正しく動作しません
それで、私の質問: それはどのように機能しますか?