MFC+OpenCV 利用Show方法使图像不拉伸显示在Picture控件上

来源:互联网 发布:淘宝上如何退货给买家 编辑:程序博客网 时间:2024/04/30 00:01

利用Show方法可以指定显示的起始坐标,

故只需进行简单的判断,

即可使图像在Picture控件上显示不发生拉伸

 

 

e.g:

rw = rect.right - rect.left;  //得到控件宽度
 rh = rect.bottom - rect.top;  //得到控件高度
 iw = image->width;            //得到图像宽度
 ih = image->height;           //得到图像高度
 tx = (int)(iw - rw)/2;        //得到显示的初始x坐标
 ty = (int)(ih - rh)/2;        //得到显示的初始y坐标
 CvvImage cimg;       //使用CvvImage类的图像的DrawToHDC函数
 
 cimg.CopyOf(image,image -> nChannels ); //根据所给的图像设置其显示的通道数

 if (tx <= 0 && ty <= 0)   //图像比DC小
 {
      x = -tx;  //从DC上的第几行开始
   y = -ty;  //从DC上的第几列开始
      w = iw;  //图像宽度
   h = ih;  //图像高度
      from_x = 0;  //从图像第几行开始
   from_y = 0;  //从图像第几列开始
 }else if (tx > 0 && ty > 0)  //图像比DC大
 {
  x = 0;  //从DC上的第几行开始
  y = 0;  //从DC上的第几列开始
  w = rw;  //图像宽度
  h = rh;  //图像高度
  from_x = tx;  //从图像第几行开始
  from_y = ty;  //从图像第几列开始
 }else if (tx > 0 && ty <= 0)  //图像长比DC长
 {
  x = 0;  //从DC上的第几行开始
  y = -ty;  //从DC上的第几列开始
  w = rw;  //图像宽度
  h = ih;  //图像高度
  from_x = tx;  //从图像第几行开始
  from_y = 0;  //从图像第几列开始
 }else if (tx <= 0 && ty > 0)  //图像宽比DC宽
 {
  x = -tx;  //从DC上的第几行开始
  y = 0;  //从DC上的第几列开始
  w = iw;  //图像宽度
  h = rh;  //图像高度
  from_x = 0;  //从图像第几行开始
  from_y = ty;  //从图像第几列开始
 }
 cimg.Show(hDC,x,y,w,h,from_x,from_y);
 ReleaseDC(pDC);

原创粉丝点击