剪切UIImage

剪切UIImage

我有一些调整图像大小的代码,这样我就可以得到图像中心的一个缩放块-我用它来获取一个UIImage并返回一个小的,方形的图像表示,类似于在相册视图中看到的照片应用程序。(我知道我需要一个UIImageView并调整裁剪模式以获得相同的结果,但这些图像有时会显示在UIWebViews).

在这段代码中,我开始注意到一些崩溃,我有点困惑。我有两种不同的理论,我想知道两者是否都是根据的。

理论1)我通过绘制到目标大小的屏幕外图像上下文来实现裁剪。因为我想要图像的中心部分,所以我设置了CGRect传递给drawInRect比我的图像上下文范围更大的东西。我本来希望这是犹太人,但我是不是在试图去回忆我不该去触摸的其他记忆呢?

理论2)我所有这些都是在后台做的。我知道UIKit的一些部分被限制在主线程上。我以为/希望画到屏幕外的视图不是其中之一。我错了吗?

(哦,我多么想念NSImage's drawInRect:fromRect:operation:fraction:方法)


慕容708150
浏览 428回答 3
3回答

慕桂英546537

若要在保持相同大小和方向的同时裁剪视网膜图像,请在UIImage类别(IOS 4.0及以上)中使用以下方法:- (UIImage *)crop:(CGRect)rect {     if (self.scale > 1.0f) {         rect = CGRectMake(rect.origin.x * self.scale,                           rect.origin.y * self.scale,                           rect.size.width * self.scale,                           rect.size.height * self.scale);     }     CGImageRef imageRef = CGImageCreateWithImageInRect(self.CGImage, rect);     UIImage *result = [UIImage imageWithCGImage:imageRef scale:self.scale orientation:self.imageOrientation];     CGImageRelease(imageRef);     return result;}

翻阅古今

您可以创建一个UIImage类别,并在任何需要的地方使用它。基于hitScans的回应和评论,以下是它。@implementation&nbsp;UIImage&nbsp;(Crop)-&nbsp;(UIImage&nbsp;*)crop:(CGRect)rect&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;rect&nbsp;=&nbsp;CGRectMake(rect.origin.x*self.scale,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.origin.y*self.scale,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.size.width*self.scale,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.size.height*self.scale);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;CGImageRef&nbsp;imageRef&nbsp;=&nbsp;CGImageCreateWithImageInRect([self&nbsp;CGImage],&nbsp;rect); &nbsp;&nbsp;&nbsp;&nbsp;UIImage&nbsp;*result&nbsp;=&nbsp;[UIImage&nbsp;imageWithCGImage:imageRef&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scale:self.scale&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;orientation:self.imageOrientation];&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;CGImageRelease(imageRef); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;}@end你可以这样使用它:UIImage&nbsp;*imageToCrop&nbsp;=&nbsp;<yourImageToCrop>;CGRect&nbsp;cropRect&nbsp;=&nbsp;<areaYouWantToCrop>;&nbsp;&nbsp; &nbsp;//for&nbsp;example//CGRectMake(0,&nbsp;40,&nbsp;320,&nbsp;100);UIImage&nbsp;*croppedImage&nbsp;=&nbsp;[imageToCrop&nbsp;crop:cropRect];
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS