程序截取桌面位图后,然后在一个对话框的PIC控件上进行绘制当然,大家都知道,这个PIC控件比桌面范围小
所以,当我把截取的桌面位图用StretchDIBits这个函数绘制到PIC上的时候
其效果很差,画面不清晰感觉截取桌面的位图的分辨率与PIC控件的分辨率不一样
不知道是不是这个问题
该怎么解决?

解决方案 »

  1.   

    不使用 StretchDIBits , 直接让PIC控件显示,效果是否正常(当然,只能显示部分)?如果不正常,那就是你截图部分的代码有问题;正常则说明你后面使用 StretchDIBits 的代码有问题。
      

  2.   

    是不论是直接显示 还是用函数绘制上去都不清晰
    但是,如果我在一个全屏的窗口里进行显示  这个窗口是CWnd一个派生的类对象  就很清晰
      

  3.   

    试试在StretchDIBits之前加上一句,SetStretchBltMode(hdc,HALFTONE);
    这句话会在压缩图像时做一些插值柔化处理,而不是简单丢弃一些点,使得图像看上去舒服些。
      

  4.   

    SetStretchBltMode(m_fullWnd.GetDC()->m_hDC,HALFTONE);
    StretchDIBits(m_fullWnd.GetDC()->m_hDC,0,0,m_fullWnd.m_wight,m_fullWnd.m_heght,0,0,x,y,&m_TempData[sizeof(BITMAPINFO)],&bInfo,DIB_RGB_COLORS,SRCCOPY);
    试了下,效果没有太大的变化
      

  5.   

    GetDC()好像不能这么反复调,每次调用会重新分配一个DC, 第一次设置的属性等于白设CDC *pDC = m_fullWnd.GetDC();
    SetStretchBltMode(pDC->m_hDC, ...)
    StretchDIBits(pDC->m_hDC, ...)
      

  6.   

    先整体把我的问题说下:客户端不断的截取桌面位图,发送到服务端服务端收到位图进行显示显示代码为:m_BK:这个是PIC控件对应的变量    m_Rect:为PIC控件对应的矩形区域  前面已经获取
    pdc=m_BK.GetDC();BITMAPINFO bInfo;
    memcpy(&bInfo,m_TempData,sizeof(bInfo));
    怎么贴图本地机上的图 ,怎么加载上去?
    int x  = bInfo.bmiHeader.biWidth;
    int y  = bInfo.bmiHeader.biHeight;
    StretchDIBits(pdc->m_hDC,0,0,abs(m_Rect.left-m_Rect.right),abs(m_Rect.bottom-m_Rect.top),0,0,x,y,&m_TempData[sizeof(BITMAPINFO)],&bInfo,DIB_RGB_COLORS,SRCCOPY);
    ReleaseDC(pdc);显示的图像为: