可能是StretchBlt的Draw mode没有设对,SRCAND应改为SRCCOPY

解决方案 »

  1.   

    StretChBlt有问题, 一般的显示设备是支持此函数的,但一般的打印机设备不支持,用此函数之前,最好用GetDeviceCaps查一下,我建议你用BitBlt试试,它支持的设备多一些,对于图象的扩张和压缩,最好自己用Bitmap搞:)
      

  2.   

    可能是StretchBlt的Draw mode没有设对,SRCAND应改为SRCCOPY-------
    注: 即使这样 还是无法打印!!!!
      
      

  3.   

    Re: "StretChBlt有问题, 一般的显示设备是支持此函数的,但一般的打印机设备不支持,用此函数之前,最好用GetDeviceCaps查一下,我建议你用BitBlt试试,它支持的设备多一些,对于图象的扩张和压缩,最好自己用Bitmap搞:) "   注: 即使这样 还是无法打印!!!!怎样做到与设备无关地打印BMP图形!!!!
      

  4.   

    你用BitBlt一般没有问题,至少我目前为止没有遇到任何问题,我建议你用此函数。
    这是我在防闪烁的一种用法(OnPain函数中):
    CRect rect;
    GetClientRect(&rect); CBitmap pBM; //Bitmap for drawing against flashing
    CBitmap* pBMOld; 
    CDC* pDC = new CDC;

    VERIFY(pDC);
    VERIFY(pDC->CreateCompatibleDC(&dc));
    pBM.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
    pBMOld = pDC->SelectObject(&pBM);
    //////////////////////////////////////////////
    //your code
    //在此我有许多BMP操作,没有任何问题
    ////////////////////////////////////////////////
    dc.BitBlt(0, 0, rect.Width(), rect.Height(), pDC, 0, 0, SRCCOPY);//copy bitmap to current DC
    delete pDC;
    pBM.DeleteObject();
      

  5.   

    StretchBlt的前四个参数换成下面得到值即可,我以前碰到过此问题,要想图像不失真,你还要进行比例变换。我用宽度为基准换算。nWidth = pdc->GetDeviceCaps(HORZRES); (宽度)
     .......