• 1133阅读
  • 1回复

自适应图片 [复制链接]

上一主题 下一主题
离线啊冲
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2016-02-16


有时我们在一个区域绘制一张图片,如果强制绘制,会失图片失真,所以自己写了一个简单算法,计算在当前区域下,按图片比例显示的区域为多大,居中
代码如下:


[cpp] view plain copy

  1. BOOL MeetRect(CRect &rc, CSize szPic)  
  2. {  
  3. int x, y, w, h;  
  4. int nWidth = rc.Width();  
  5. int nHeight = rc.Height();  
  6.   
  7. if(nWidth > 0 && szPic.cx > 0)  
  8. {  
  9.   // Get Meet Rect  
  10.   if(szPic.cx > nWidth || szPic.cy > nHeight)  
  11.   {  
  12.    const float fRatio = (float)nHeight / nWidth;  
  13.    const float fPicRatio = (float)szPic.cy / szPic.cx;  
  14.   
  15.    if(fPicRatio > fRatio)  
  16.    {  
  17.     w = (int)(((float)nHeight) / fPicRatio);  
  18.     h = nHeight;  
  19.     x = rc.left + (nWidth - w) / 2;  
  20.     y = rc.top;    
  21.    }  
  22.    else  
  23.    {  
  24.     w = nWidth;  
  25.     h = (int)(((float)nWidth )* fPicRatio);  
  26.     x = rc.left;  
  27.     y = rc.top + (nHeight - h) / 2;  
  28.    }  
  29.   }  
  30.   else  
  31.   {  
  32.    w = szPic.cx;  
  33.    h = szPic.cy;  
  34.    x = rc.left + (nWidth - w) / 2;  
  35.    y = rc.top + (nHeight - h) / 2;  
  36.   }  
  37.   
  38.   rc.SetRect(x, y, x + w, y + h);  
  39.   return TRUE;  
  40. }  
  41. return FALSE;  
  42. }  



善者 慈悲心常在 无怨无恨 以苦为乐
默认压缩密码www.hifyl.com
文件分享密码问题:http://www.hifyl.com/read-htm-tid-4444.html
离线v2680267313

只看该作者 沙发  发表于: 2016-04-30
用户被禁言,该主题自动屏蔽!
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个