VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 276|回复: 3

C\C++屏幕抓取求助

[复制链接]
19_avatar_middle
最佳答案
8 
在线会员 发表于 2020-2-16 15:14:23 | 显示全部楼层 |阅读模式
写屏幕抓取调式了没有问题,但是把抓取的图片放在图片框里后就出问题了,图片会慢慢的往里面缩..只有图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课问题
07_avatar_middle
最佳答案
4 
在线会员 发表于 2020-2-16 16:31:43 | 显示全部楼层
越来越小是因为每次抓取的图片包含当前正在显示的你自己的程序的界面,你可以试试把截图界面保存成图像序列或者再搞一个显示器,在那个显示器上显示你自己的程序界面,当然,截图的时候需要指定只截第一个显示器的内容。
19_avatar_middle
最佳答案
8 
ico_lz  楼主| 发表于 2020-2-16 18:41:54 | 显示全部楼层
freehawkzk 发表于 2020-2-16 16:31
越来越小是因为每次抓取的图片包含当前正在显示的你自己的程序的界面,你可以试试把截图界面保存成图像序列 ...

有点深奥 大神能不能在详细点,或者给个这方面的教材就最好了
07_avatar_middle
最佳答案
4 
在线会员 发表于 2020-2-16 21:00:57 | 显示全部楼层
236a 发表于 2020-2-16 18:41
有点深奥 大神能不能在详细点,或者给个这方面的教材就最好了

没啥深奥的,
还有一个模拟方式,
你在桌面上显示一张图片,然后用手机对着屏幕拍一张,再把这张图显示到桌面上,然后再用手机拍一张看看,也一样会有那个“越来越小”的效果的。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-30 12:01

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表