• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何根据设备大小和比例调整 UIImage 的大小?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 06:23:54 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个尺寸为 (1008, 669) 的 UIImage 如何根据我的设备尺寸调整它的大小(例如,如果我在 iPhone4s 中查看它,它的宽度将为 640 x 960 ((320 *retina_scale) x (480 *retina_scale))。我正在使用下面的方法,但我的图像只是在 UIImageView 中拉伸(stretch)。如何处理这个?如何使其动态以便它可以工作各种图片?

- (UIImage *) hResizeImageUIImage *)image withTargetSizeCGSize)targetSize {
    CGSize size = image.size;
    CGFloat widthRatio = targetSize.width / image.size.width;
    CGFloat heightRatio = targetSize.height / image.size.height;

    // Figure out what our orientation is, and use that to form the rectangle
    CGSize newSize;
    if(widthRatio > heightRatio) {
        newSize = CGSizeMake(size.width * heightRatio, size.height * heightRatio);
    } else {
        newSize = CGSizeMake(size.width * widthRatio,  size.height * widthRatio);
    }

    // This is the rect that we've calculated out and this is what is actually used below
    CGRect scaledRect = CGRectMake(0, 0, newSize.width * [UIScreen mainScreen].scale, newSize.height * [UIScreen mainScreen].scale);

    // Actually do the resizing to the rect using the ImageContext stuff
    UIGraphicsBeginImageContextWithOptions(scaledRect.size, false, [UIScreen mainScreen].scale);
    [image drawInRect:scaledRect];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}



Best Answer-推荐答案


由于在 UIGraphicsBeginImageContextWithOptions 中指定了缩放因子,因此在计算 scaledRect 时不需要将宽高乘以屏幕比例。

如果你在 UIGraphicsBeginImageContextWithOptions 中指定 0.0 的值,缩放因子会自动设置为设备主屏幕的缩放因子。

- (UIImage *)hResizeImageUIImage *)image withTargetSizeCGSize)targetSize {
    CGSize size = image.size;
    CGFloat widthRatio = targetSize.width / image.size.width;
    CGFloat heightRatio = targetSize.height / image.size.height;

    // Figure out what our orientation is, and use that to form the rectangle
    CGSize newSize;
    if(widthRatio > heightRatio) {
        newSize = CGSizeMake(size.width * heightRatio, size.height * heightRatio);
    } else {
        newSize = CGSizeMake(size.width * widthRatio,  size.height * widthRatio);
    }

    // This is the rect that we've calculated out and this is what is actually used below
    CGRect scaledRect = CGRectMake(0, 0, newSize.width, newSize.height);

    // Actually do the resizing to the rect using the ImageContext stuff
    UIGraphicsBeginImageContextWithOptions(scaledRect.size, false, 0.0f);
    [image drawInRect:scaledRect];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

关于ios - 如何根据设备大小和比例调整 UIImage 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29642587/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap