Ios 裁剪图像。裁剪的图像不正确

Ios 裁剪图像。裁剪的图像不正确,ios,Ios,我在屏幕上有一个UIImageView。它显示具有多种颜色的图像。当我单击图像时,它会裁剪图像的一小部分,并将裁剪后的图像设置为新的小UIImageView。由于某些原因,裁剪后的图像总是错误的。查看下面的屏幕截图: 以下是touchesBegin的完整代码: -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { CGPoint location = [[touches anyObject] locatio

我在屏幕上有一个UIImageView。它显示具有多种颜色的图像。当我单击图像时,它会裁剪图像的一小部分,并将裁剪后的图像设置为新的小UIImageView。由于某些原因,裁剪后的图像总是错误的。查看下面的屏幕截图:

以下是touchesBegin的完整代码:

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    CGPoint location = [[touches anyObject] locationInView:self.imageView];

    UIImage *originalImage = self.imageView.image;

    NSLog(@"x = %f, y = %f",location.x,location.y);

    CGRect cropRegion = CGRectMake(location.x, location.y, 10, 10);

    CGImageRef subImage = CGImageCreateWithImageInRect(originalImage.CGImage, cropRegion);

    UIImage *croppedImage = [UIImage imageWithCGImage:subImage scale:originalImage.scale orientation:originalImage.imageOrientation];

    [self.previewImageView setImage:croppedImage];

    CGImageRelease(subImage);

}

最可能的解释是图像大小大于视图大小,因此图像已缩小以适合视图。结果是视图坐标与图像坐标不匹配,因此,
locationInView
返回的点不能直接用于
CGImageCreateWithImageInRect


要解决此问题,您需要根据
self.imageView.bounds.size
originalImage.size
确定x和y比例因子,然后相应地缩放
位置。

只是一个猜测,但是,如果您比较原始图像的大小和UIImageView的大小,您可能会发现,与原始图像上的坐标相比,“位置”点很可能不在您接触的点上。图像可能正在缩放以适应UIImageView,因此您需要调整坐标以获得正确的位置。@BrianShamblen,那么您如何做到这一点呢?答对了!你是100%正确的先生:)我挠了将近一个小时的脑袋:)