先按最大宽度算出等比压缩高度
如果算出的高度不超过最大高度限制,OK否则同理按最大高度算出等比压缩宽度,注意此时所用的源宽高是第一步算出的我好像有点明白你的意思了,我再细想想
你再举个例子整明白点

解决方案 »

  1.   

    是不是这样,你看还能优化吗?
    ---------------------------------------------------
    public struct Size{
    int Width;
    int Height;
    }
    Size size = new Size();
    size.Width = 最大宽度;
    size.Height = 最大高度;if(实际宽度 >= 最大宽度){
    //按最大宽度缩放
    size.Width = 最大宽度;
    size.Height = 实际高度 * 最大宽度 / 实际宽度;

    if(size.Height > 最大高度){
    //按最大高度缩放;
    size.Height = 最大高度;
    size.Width = 实际宽度 * 最大高度 / 实际高度;
    return size;
    }
    return size;
    }
    else{
    if( 实际高度 > 最大高度){
    //按最大高度缩放;
    size.Height = 最大高度;
    size.Width = 实际宽度 * 最大高度 / 实际高度;
    return size;
    }
    }
    return size;
      

  2.   

    代码还可以优化,两步是可以分开的
    size.Width = 实际宽度;
    size.Height = 实际高度;
    if(size.Width > 最大宽度){
    //按最大宽度缩放
    size.Width = 最大宽度;
    size.Height = size.Height * 最大宽度 / size.Width;
    }
    if(size.Height > 最大高度){
    //按最大高度缩放;
    size.Height = 最大高度;
    size.Width = size.Width * 最大高度 / size.Height;
    }
    return size;
      

  3.   

    第一步得到的结果size,
    可以在第二步中使用,
    因为这个size,已经没有宽度问题了
    只要解决高度问题即可
      

  4.   

    没必要一定操作原size,因为宽高比例是永远不变的
      

  5.   

    我是忙里偷闲,在web区灌,俺也得干活了
    不灌了,有空聊