|
写屏幕抓取调式了没有问题,但是把抓取的图片放在图片框里后就出问题了,图片会慢慢的往里面缩..只有图1,图2是正常的..往后都会往里面缩
由于是抓取图片是分开写的 抓取的图片路径我放到队列里的,然后加载到图片框.我分别调试了,如果只抓取图片不放在图片框里,就不会出现往里面缩的情况,图1 ,图2,如果把图片加载到图片框就会往里面缩 图3 图4 图5
-----------------------------------------------------------------------------------------------
加载图片的函数
----------------------------------------------------------------------------------------------
CString L;
L.Format("%d",i);
string Pa = "E:\\Visual -- Studio\\编译\\RemoteControl\\RemoteControl\\1";
string b = "a";
b += L;
CaptureImage(GetDesktopWindow(), (char*)Pa.c_str(), (char*)b.c_str());
i++;
CRect rect;
CRect rect1;
CImage image; //创建图片类
Sleep(500);
image.Load(q.front().c_str()); //根据图片路径加载图片
image.Load(b.c_str()); //根据图片路径加载图片
q.pop();
//获取Picture Control控件的大小
p->GetDlgItem(IDC_WT)->GetWindowRect(&rect);//将窗口矩形选中到picture控件上
p->ScreenToClient(&rect);//将客户区选中到Picture控件表示的矩形区域内
p->GetDlgItem(IDC_WT)->GetClientRect(&rect);
CWnd* pWnd = p->GetDlgItem(IDC_WT);//获得pictrue控件窗口的句柄
pWnd->GetClientRect(&rect);//获取句柄指向控件区域的大小
CDC* pDC = pWnd->GetDC();//获得pictrue控件的DC
SetStretchBltMode(pDC->m_hDC, STRETCH_HALFTONE);
if (image.GetWidth() <= rect.Width() && image.GetHeight() <= rect.Width()) //图片小于控件区域,不缩放
{
rect1 = CRect(rect.TopLeft(), CSize(image.GetWidth(), image.GetHeight()));
image.StretchBlt(pDC->m_hDC, rect1, SRCCOPY);//将图片画到Picture控件表示的矩形区域
}
else
{
float xScale = (float)rect.Width() / (float)image.GetWidth();
float yScale = (float)rect.Height() / (float)image.GetHeight();
float ScaleIndex = (xScale <= yScale ? xScale : yScale);
rect1 = CRect(rect.TopLeft(), CSize((int)image.GetWidth() * ScaleIndex, (int)image.GetHeight() * ScaleIndex));
//image.StretchBlt(pDC->m_hDC, rect1, SRCCOPY);//将图片画到Picture控件表示的矩形区域
image.Draw(pDC->m_hDC, rect);//将图片绘制到picture表示的区域内
}
//image.Draw(pDC->m_hDC, rect);//将图片绘制到picture表示的区域内
p->ReleaseDC(pDC);
}
return 0; |
-
正常
-
正常
-
不正常-往屏幕里面缩了
-
不正常-往屏幕里面缩了
-
不正常-往屏幕里面缩了
上一篇: VS2017无法安装离线msdn下一篇: c++实用41课问题
|