我对正确使用 UIImage 和方法 drawInRect 有疑问。
我使用 iPad 4,Xcode 版本6.1.1
,IOS 8.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) 工作不正确
所以,我的问题是:它是如何工作的?