图像与界面(或控件)的自适应(fit window)

一张图片的分辨率(长和宽)不确定,一个界面(或者控件)的大小(同样指长和宽)不确定。
那么此时把这张图片放入界面(或控件)中,如何形成类似于下面三种情况呢(黑框为图像,红框为界面)?

 

 


其实只要计算出长宽比即可实现。
假设界面坐标系左上角为0,0点,引入几个变量名称
     *  Wc : 控件横轴宽度
     *  Hc : 控件纵轴高度 
     *  Wc/Hc=Ctrl_AspectRatio : 控件长宽比
     *  Wi : 图像横轴分辨率 
     *  Hi : 图像纵轴分辨率
     *  Wi/Hi=Img_AspectRatio : 图像长宽比
     *  x,y,w及h代表Rect的左上点x,y坐标及横纵长度

当 Ctrl_AspectRatio >= Img_AspectRatio 时,控件Wc/Hc比 大于等于 图像Wi/Hi比。
    h = Hc, Hi = Hc, Wi/Hi = Img_AspectRatio = Wi/Hc,  即Wi = Hc * (Wi/Hi) = Hc * Img_AspectRatio
    此时 x = rect.left + (Wc - Wi)/2, y = rect.top, w = Wi = Hc* (Wi/Hi), h = Hc.

        x = rect.left + (int)((double)Wc - (double)Hc * Img_AspectRatio)/2.0;
        y = rect.top;
        w = (int)((double)Hc * Img_AspectRatio);
        h = Hc;

        rect.left = x;
        rect.right = x + w;

当 Ctrl_AspectRatio < Img_AspectRatio 时,控件Wc/Hc比 小于 图像Wi/Hi比。
    w = Wc(宽度等于控件横轴宽度), Wi = Wc,Wi/Hi = Img_AspectRatio = Wc/Hi, 即Hi = Wc / Img_AspectRatio
    此时 x = rect.left, y = rect.top + (Hc - Hi)/2 , w = Wc, h = Hi = Wc / (Wc/Hc)

        x = rect.left;
        y = rect.top + (int)((double)Hc - (double)Wc / Img_AspectRatio) / 2.0;
        w = Wc;
        h = ((double)Wc / Img_AspectRatio);

        rect.top = y;
        rect.bottom = y + h;


以上初步实现fit window.. 暂时不确定是否有bug..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值