用宽高比调整UIImage的大小?

我正在使用以下代码来调整iPhone上图像的大小:


CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0);

UIGraphicsBeginImageContext(screenRect.size);

[value drawInRect:screenRect blendMode:kCGBlendModePlusDarker alpha:1];

UIImage *tmpValue = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

只要图像的纵横比与新调整大小的图像的纵横比匹配,该方法就很好用。我想对此进行修改,以使其保持正确的宽高比,并在未显示图像的任何地方放置黑色背景。因此,我仍然会得到一张320x480的图像,但顶部和底部或侧面为黑色,具体取决于原始图像的大小。


有没有一种类似于我正在做的简单方法?谢谢!


慕桂英4014372
浏览 552回答 3
3回答

慕码人2483693

设置屏幕矩形后,请执行以下类似操作,以决定在哪个矩形上绘制图像:float hfactor = value.bounds.size.width / screenRect.size.width;float vfactor = value.bounds.size.height / screenRect.size.height;float factor = fmax(hfactor, vfactor);// Divide the size by the greater of the vertical or horizontal shrinkage factorfloat newWidth = value.bounds.size.width / factor;float newHeight = value.bounds.size.height / factor;// Then figure out if you need to offset it to center vertically or horizontallyfloat leftOffset = (screenRect.size.width - newWidth) / 2;float topOffset = (screenRect.size.height - newHeight) / 2;CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight);如果您不想放大小于screenRect的图像,请确保factor大于或等于1(例如factor = fmax(factor, 1))。要获得黑色背景,您可能只想将上下文颜色设置为黑色,并在绘制图像之前调用fillRect。

慕的地10843

我得到“的功能隐式声明的‘最大’”由编译器抛出,即使我记得,包括math.h中(我用的XCode 4.0)更改:float factor = max( …以float factor = MAX( …全部大写)解决了这个问题。FWIW之所以需要重新缩放UIImage(而不是UIImageView),是因为我将图像设置为默认样式的UITableCell。这有助于我避免实现自定义UITableCell。感谢Frank提供的出色解决方案!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS