我正在开发一个应用来裁剪图像。 我正在使用以下代码来调用裁剪方法:
UIImage* croppedImage = [self imageCrop:imageView toRect:CGRectMake(10.0, 50.0, 320, 100)];
以下是该方法的代码:
{
//create a context to do our clipping in
CGRect newRect = CGRectApplyAffineTransform(rect, imageViewToCrop.transform);
UIImage *imageToCrop = imageViewToCrop.image;
UIGraphicsBeginImageContext(newRect.size);
CGContextRef currentContext = UIGraphicsGetCurrentContext();
//create a rect with the size we want to crop the image to
//the X and Y here are zero so we start at the beginning of our
//newly created context
CGRect clippedRect = CGRectMake(0, 0, rect.size.width, rect.size.height);
CGContextClipToRect( currentContext, clippedRect);
//draw the image to our clipped context using our offset rect
CGContextDrawImage(currentContext, newRect, imageToCrop.CGImage);
//pull the image from our cropped context
UIImage *cropped = UIGraphicsGetImageFromCurrentImageContext();
//pop the context to get back to the default
UIGraphicsEndImageContext();
return cropped;
}
问题是当我将此图像设置为UIImageView时,我发现返回的图像向左旋转。我无法让它旋转起来。 任何人都可以知道这个问题吗?
答案 0 :(得分:2)
Uiimage具有 imageOrientation 属性,在某些情况下指示系统应显示图像位的方式。尝试记录该值并查看。如果我怀疑那么您可能需要调整裁剪算法,首先创建一个CGImage,然后使用UIImage方法从其中创建一个具有方向参数的UIImage。
答案 1 :(得分:1)
正如David所写,问题很可能是你没有保留 imageOrientation 属性。您的代码的问题还在于您不保留 scale 属性。 尝试创建这样的裁剪图像:
CGImageRef croppedRef = CGBitmapContextCreateImage(currentContext);
UIImage* cropped = [UIImage imageWithCGImage:croppedRef scale:imageToCrop.scale orientation:imageToCrop.imageOrientation];
CGImageRelease(croppedRef);