关于图片适配问题

本文介绍了如何在Unity中处理动态加载的图片,确保它们能根据外框大小进行适配,避免拉伸。通过设置一个外边框,将图片作为其子对象,根据图片是否超出边框进行同比放大缩小,从而填充外框。提供了一个名为GetPrefectSpSize的方法,用于计算适配后的图片尺寸,并给出了详细的代码实现。
摘要由CSDN通过智能技术生成

背景

在开发过程中可能会遇到动态加载图片显示在UI上,但是UI切图不规范,长款大小不一致,导致动态加载显示大小不同,这时候需要对加载好的Sprite依据外框大小进行动态调整长款。调整思想:设置一个外边框,图片为外边框的子对象,图片是否超框判断,同比放大缩小,填充外框,避免拉伸图片。

    /// <summary>
    /// 图片显示适配
    /// </summary>
    /// <param name="sp">目标图片</param>
    /// <param name="maxHeight">外框最大高度</param>
    /// <param name="maxWidth">外框最大宽度</param>
    /// <returns>返回目标图片适配后的长宽</returns>
    public Vector2 GetPrefectSpSize(Sprite sp, float maxHeight, float maxWidth)
    {
        Vector2 v2 = Vector2.zero;
         var height = maxHeight; 
        var width = maxWidth;
        var spHeight = sp.bounds.extents.y * sp.pixelsPerUnit * 2;
        var spWidth = sp.bounds.extents.x * sp.pixelsPerUnit * 2;
        if (spHeight == height && spWidth == width)
        {
            v2.x = width;
            v2.y = height;
            return v2;
        }

        if (spWidth > width || spHeight > width)
        {
            //存在超框值
            var lerpWidth = spWidth - width;
            var lerpHeight = spHeight - height;

            if (lerpWidth > lerpHeight)
            {
                var scale = spWidth / width;
                v2.x = width;
                v2.y = spHeight / scale;
            }
            else
            {
                var scale = spHeight / height;
                v2.x = spWidth / scale;
                v2.y = height;
            }
        }
        else
        {
            //不存在超框
            var lerpWidth = width - spWidth;
            var lerpHeight = height - spHeight;
            //依据差距最小的
            if (lerpWidth < lerpHeight)
            {
                var scale = width / spWidth;
                v2.x = width;
                v2.y = spHeight * scale;
            }
            else
            {
                var scale = height / spHeight;
                v2.x = spWidth * scale;
                v2.y = height;
            }
        }
        return v2;
    }

需要者自取Demo_002:
https://blog.csdn.net/qq_25122429/article/details/114098885

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W低小调W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值