为了账号安全,请及时绑定邮箱和手机立即绑定

用宽高比调整UIImage的大小?

用宽高比调整UIImage的大小?

iOS
慕桂英4014372 2019-10-26 12:37:12
我正在使用以下代码来调整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的图像,但顶部和底部或侧面为黑色,具体取决于原始图像的大小。有没有一种类似于我正在做的简单方法?谢谢!
查看完整描述

3 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

设置屏幕矩形后,请执行以下类似操作,以决定在哪个矩形上绘制图像:


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 factor

float 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 horizontally

float 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。


查看完整回答
反对 回复 2019-10-26
?
慕的地10843

TA贡献1785条经验 获得超8个赞

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

查看完整回答
反对 回复 2019-10-26
  • 3 回答
  • 0 关注
  • 551 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信