2

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) は正しく動作しません

それで、私の質問: それはどのように機能しますか?

4

2 に答える 2

0

魔法は無いと思います。CGImage オブジェクトは割り当て解除されていませんが、所有されています。このためには、image.CGImage を何らかの変数に設定してから、それを解放する必要があります。

CFRelease(cgImage);

また、すべての処理が完了したら、グラフィックス コンテキストをクリアしてみてください。

于 2014-12-18T19:35:25.283 に答える