代码本来是运行正常的,但是最近测试发现激光打印机打打印不出位图.但是在输出在电脑上可以,比如格式mdi,xps等都没有问题.代码如下: 
        CDC *pDC =GetDC();
        CDC imageDC;
imageDC.CreateCompatibleDC(pDC); CBitmap* pOldMemDCBitmap = NULL;
        CBitmap m_bmpScreen;
m_bmpScreen.CreateCompatibleBitmap( pDC, rect.Width(), rect.Height() );
pOldMemDCBitmap = (CBitmap*)imageDC.SelectObject(&m_bmpScreen);

imageDC.FillSolidRect(rect,RGB(255,255,255));//实际编辑imageDC位图代码 ..........
............
//....
//PrinterDC 是实际输出的CDC
PrinterDC->StretchBlt( x,y,rect.Width()*amp, rect.Height()*amp,&imageDC,0,0,rect.Width(), rect.Height(),SRCAND );//amp 位倍数
imageDC.SelectObject(pOldMemDCBitmap);
//释放资源代码//我自己做过一个试验,就是把上面代码中的pDC初始化为PrinterDC,可以打印,但是原本打印出彩色矩形图(打印机实际效果为淡黑色),却输出中矩形里面是点正图,而不是淡黑色的,很奇怪?

解决方案 »

  1.   

    其实我也不清楚为什么用SRCAND,但是我看了CSDN,也没有得到什么新想法。但是其他的几个参数我也试过,也是不行。比如SRCCOPY等。
    可以解释下他们在实际中试怎样使用的吗?看了CSDN没有想法。
      

  2.   

    SRCCOPY是直接复制图象,SRCAND是把指定图象和原有图象用“与”操作来合并。
      

  3.   

    我尝试过SRCCOPY,也没有用 啊.
      

  4.   

    现在使用的打印机是 HP LaserJet 5200 PCL 6 .
    原来打印机从PCL 5 升级到 PCL 6,支持的像素更高了。我想可能是这个引起的。但问题在哪呢?
      

  5.   

    PrinterDC->StretchBlt( x,y,rect.Width()*amp, rect.Height()*amp,&imageDC,0,0,rect.Width(), rect.Height(),SRCAND );//amp 位倍数
    用GetLastError抓,显示参数不正确,但是好像都对阿。
    急救阿。
      

  6.   

    CRect rect;
    GetClientRect(&rect);//这个是在GetDC()的地方。int resx = printerDC.GetDeviceCaps( HORZRES ) + 1;
    scale_x = resx / 4800.0;
    amp = 5 * scale_x.
      

  7.   

    是不是窗口太大了?这样试试:
    PrinterDC->StretchBlt(x,y,printerDC.GetDeviceCaps(HORZRES), printerDC.GetDeviceCaps(HORZRES)/rect.Width()*rect.Height(),&imageDC,0,0,rect.Width(),rect.Height(),SRCCOPY);
      

  8.   

    不是所有的打印机(打印驱动)都支持StretchBlt,用ExtEscape测试一下,不支持就用BitBlt来替代。
      

  9.   

    先用PrinterDC->GetDeviceCaps(RASTERCAPS)取一下打印机支持哪些函数。
      

  10.   

    矩形坐标可能出现负值,最好用CRect::NormalizeRect()规格化一下。
      

  11.   

    首先 ,谢谢大家,特别是cnzdgs 的关注。现在还没有搞定,哈哈。有个信息是我对这个问题的提示://我自己做过一个试验,就是把上面代码中的pDC初始化为PrinterDC,可以打印,但是原本打印出彩色矩形图(打印机实际效果为淡黑色),却输出中矩形里面是点阵图,而不是淡黑色的,很奇怪?
      

  12.   

    一般“谢谢大家”的时候都是准备要结贴了,我一般看到这几个字就关网页不看了,这次多看了一眼……
    按这样来看,打印机是支持StretchBlt的,有可能是位图的问题,你试试StretchDIBits有没有问题。