从应用于现有UIImage的变换生成新UIImage的最快方法是什么?

时间:2010-09-07 21:39:38

标签: iphone cocoa-touch uikit uiimage core-graphics

我正在尝试拍摄从后置摄像头拍摄的图像,对其应用缩放变换,然后输出与原始尺寸相同但放大的新图像。

我下面的内容有效...... 它很慢(尤其是UIGraphicsBeginImageContext(size);和UIGraphicsEndImageContext()之间的代码;)

有更好的方法吗?特别是,一种会产生相同结果但速度更快的方法?

UIImage *tempImage = [[UIImage alloc] initWithData:imageData];

CGImageRef img = [tempImage CGImage];
CGFloat width = CGImageGetWidth(img);
CGFloat height = CGImageGetHeight(img);
CGRect bounds = CGRectMake(0, 0, width, height);
CGSize size = bounds.size;

CGFloat z = 5.0; 
CGAffineTransform xfrm = CGAffineTransformMakeScale(z, z);

UIGraphicsBeginImageContext(size);
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextConcatCTM(currentContext, xfrm);
CGContextDrawImage(currentContext, bounds, img);

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

谢谢 - wg

1 个答案:

答案 0 :(得分:0)

答案很简单:裁剪然后缩放

UIImage的大小可能相当大,特别是当通过相机以“照片”质量捕获时,在缩放时会导致性能不佳。因此,最佳做法是首先将照片裁剪为所需尺寸,然后根据需要进行缩放。