我对正确使用UIImage和方法drawInRect有疑问。
我使用的是iPad 4,Xcode版本6.1.1
,IOS 8.1.2
我使用了ARC而且我尝试过没有ARC
所以,我有图像“1.jpg”。
图片属性:
尺寸: 7500 x 8871像素
分辨率: 72像素/英寸
色彩空间: RGB
Alpha频道:否
我需要重新缩放原始图像“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)工作不正确
所以,我的问题:它是如何运作的?
答案 0 :(得分:0)
我想没有魔法。 CGImage对象未被释放但拥有。为此,您需要将image.CGImage设置为某个变量,然后使用
将其释放CFRelease(cgImage);
在完成所有处理后,还要尝试清除图形上下文。