【发布时间】:2012-04-25 15:52:24
【问题描述】:
我制作了这个 UIImage 扩展以获得重新缩放的副本:
-(UIImage*)scaleByRatio:(float) scaleRatio
{
CGSize scaledSize = CGSizeMake(self.size.width * scaleRatio, self.size.height * scaleRatio);
//The output context.
UIGraphicsBeginImageContext(scaledSize);
CGContextRef context = UIGraphicsGetCurrentContext();
//Percent (101%)
#define SCALE_OVER_A_BIT 1.01
//Scale.
CGContextScaleCTM(context, scaleRatio * SCALE_OVER_A_BIT, scaleRatio * SCALE_OVER_A_BIT);
[self drawAtPoint:CGPointZero];
//End?
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
它在大多数情况下都有效,但在我最近的项目中,它输出原始图像(我在使用 UIImageJPEGRepresentation 和 imageWithData: 缩放后立即保存到磁盘)。
我在后台线程中调用该方法。这可能是问题吗?如何将其重写为线程安全(假设问题是由线程引起的)。
【问题讨论】:
-
我认为问题不在于后台线程。但请记住,您在用户屏幕上的所有绘图都应该在主线程中进行
-
那么如果这个图像显示在UI中,并且在后台线程上调用了调整大小(scaleByRatio函数),那会不会有问题?
标签: iphone multithreading uiimage resize scale