代码本来是运行正常的,但是最近测试发现激光打印机打打印不出位图.但是在输出在电脑上可以,比如格式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,可以打印,但是原本打印出彩色矩形图(打印机实际效果为淡黑色),却输出中矩形里面是点正图,而不是淡黑色的,很奇怪?
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,可以打印,但是原本打印出彩色矩形图(打印机实际效果为淡黑色),却输出中矩形里面是点正图,而不是淡黑色的,很奇怪?
可以解释下他们在实际中试怎样使用的吗?看了CSDN没有想法。
原来打印机从PCL 5 升级到 PCL 6,支持的像素更高了。我想可能是这个引起的。但问题在哪呢?
用GetLastError抓,显示参数不正确,但是好像都对阿。
急救阿。
GetClientRect(&rect);//这个是在GetDC()的地方。int resx = printerDC.GetDeviceCaps( HORZRES ) + 1;
scale_x = resx / 4800.0;
amp = 5 * scale_x.
PrinterDC->StretchBlt(x,y,printerDC.GetDeviceCaps(HORZRES), printerDC.GetDeviceCaps(HORZRES)/rect.Width()*rect.Height(),&imageDC,0,0,rect.Width(),rect.Height(),SRCCOPY);
按这样来看,打印机是支持StretchBlt的,有可能是位图的问题,你试试StretchDIBits有没有问题。