VS2010-MFC:MFC PictureControl控件上自适应显示图片,分图片失真或者图片不失真两种

来源:互联网 发布:ios开发书籍推荐知乎 编辑:程序博客网 时间:2024/05/22 17:20

MFC PictureControl控件上自适应显示图片,分图片失真或者图片不失真两种

ShowPicture(CString Filepath){     /*----根据图片文件路径显示图片---------------------------------*/int height, width;CRect rect;//定义矩形类CRect rect1;CImage image; //创建图片类image.Load(Filepath);//加载图片height = image.GetHeight();//得到图片高度width = image.GetWidth();//得到图片宽度m_showPMT.GetClientRect(&rect); //获得pictrue控件所在的矩形区域,m_showPMT为与PictureControl相关联的控件变量CDC *pDc = m_showPMT.GetDC();//获得pictrue控件的DcSetStretchBltMode(pDc->m_hDC,STRETCH_HALFTONE); if(width<=rect.Width() && height<=rect.Width()) //如果图片的尺寸小于图片控件尺寸,则不缩放显示{rect1 = CRect(rect.TopLeft(), CSize(width,height));image.StretchBlt(pDc->m_hDC,rect1,SRCCOPY); //将图片画到Picture控件表示的矩形区域}else//如果图片的尺寸大于图片控件的尺寸{float xScale=(float)rect.Width()/(float)width;//求X方向的缩放因子float yScale=(float)rect.Height()/(float)height;//求Y方向的缩放因子//为了图片在图片控件上显示不失真,采用X和Y方向上较小的缩放因子作为缩放因子,此时图片不失真,但是可能不会铺满整个图片控件区域float ScaleIndex=(xScale<=yScale?xScale:yScale);//rect1 = CRect(rect.TopLeft(), CSize((int)width*xScale,(int)height*xScale));//此时图片失真,但是会铺满整个图片控件区域rect1 = CRect(rect.TopLeft(), CSize((int)width*ScaleIndex,(int)height*ScaleIndex));image.StretchBlt(pDc->m_hDC,rect1,SRCCOPY); //将图片画到Picture控件表示的矩形区域}ReleaseDC(pDc);//释放picture控件的Dc}

图片失真,但是铺满整个图片控件区域:



图片不失真,但是没有铺满整个图片控件区域:


0 0
原创粉丝点击