打印出来的图很小,怎么弄才能正常? 打印出来的图很小,怎么弄才能正常? 网上找了一些答案,但是试了多种方法还是不行。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 AfxGetApp()->DoPrintDialog(&printDlg); DEVMODE* pDevMode = printDlg.GetDevMode(); pDevMode->dmOrientation = DMORIENT_PORTRAIT ;// 改为横向打印 pDevMode->dmPaperSize = DMPAPER_A4; // 纸张类型 pDevMode->dmPaperLength = 9000; // 纸张长度 pDevMode->dmPaperWidth = 14000; // 纸张宽度 pDevMode->dmScale = 1; // 缩放比例 pDevMode->dmPrintQuality = 1200; // 打印分辨率 pDevMode->dmYResolution = 1200; dc.Attach(printDlg.GetPrinterDC());使用的不是MFC框架中的打印。对话库和OnPrint、BeginPrint等函数需要自己调用。 一般是比较小,用strechbitblt放大了再打印................. 打印机一般大于300dpi(也就是300x300的才是1寸x1寸) BitBlt(pViewDC->GetSafeHdc(), 0, 0, m_i32PrintWidth, m_i32PrintHeight, m_dcMem.GetSafeHdc(), 0, 0, SRCCOPY);我愿意是想打A4大小的图,但是打出来的确实拇指那么大的图。在上面的m_i32PrintWidth, m_i32PrintHeight两个参数直接放大不行。AfxGetApp()->DoPrintDialog(&printDlg); DEVMODE* pDevMode = printDlg.GetDevMode(); pDevMode->dmYResolution = 1200; dc.Attach(printDlg.GetPrinterDC()); LPDEVMODE lpDM = printDlg.GetDevMode(); dc.ResetDC(lpDM); 没有使用MFC的那一套,打印对话库 OnPrint OnBeginPrinting 等函数需要自己调用。 还有就是我使用模拟的打印机图形还有点正常,使用实现的打印机机器就只有拇指大了。我设置了dpi为1200 可是BitBlt(pViewDC->GetSafeHdc(), 0, 0, m_i32PrintWidth, m_i32PrintHeight, m_dcMem.GetSafeHdc(), 0, 0, SRCCOPY);我愿意是想打A4大小的图,但是打出来的确实拇指那么大的图。在上面的m_i32PrintWidth, m_i32PrintHeight两个参数直接放大还是不行我这样放大对吗? m_dcMem中的位图也放大了吗?StretchBlt会放大m_dcMem中的小图, 但肯定会失真 你把dpi设置为300。应该会大很多。在上面的m_i32PrintWidth, m_i32PrintHeight两个参数直接放大,我这样放大对吗?//肯定是不对的, pViewDC->GetSafeHdc(), ??这个不是打印机的dc吧? 我程序里面关于绘的东西所有都没有变动,只是在绘出的时候BitBlt(pViewDC->GetSafeHdc(), 0, 0, m_i32PrintWidth, m_i32PrintHeight, m_dcMem.GetSafeHdc(), 0, 0, SRCCOPY); pViewDC这个参数改变为打印机的DC。在屏幕绘出的时候pViewDC为View的DC,打印的时候pViewDC为打印机的DC,只是这个DC改变,其他都没有变动打印机的时候MemBitmap需要重新创建吗? 因为屏幕显示的时候只绘屏幕的大小,打印的时候A4纸好像大不少。 我分析是分辨率的原因,显示器的分辨率远远要小于打印机,所以如果按正常的打印方式肯定是要变小的,下面是我的解决办法: hPrinter, 打印机dchdc, hMemdc, 屏幕dcbw, bh, 图片宽度、高度//得到打印机的分辨率int print_ppix = GetDeviceCaps(hPrinter, LOGPIXELSX);int print_ppiy = GetDeviceCaps(hPrinter, LOGPIXELSY);//得到屏幕的分辨率int dc_ppix = GetDeviceCaps(hdc, LOGPIXELSX);int dc_ppiy = GetDeviceCaps(hdc, LOGPIXELSY);//放大图片StretchBlt(hMemdc, 0, 0, bw*(print_ppix/dc_ppix), bh*(print_ppiy/dc_ppiy), hdc, 0, 0, bw, bh, SRCCOPY);//打印BitBlt(hPrinter, 0, 0, bw*(print_ppix/dc_ppix), bh*(print_ppiy/dc_ppiy), hMemdc, 0, 0, SRCCOPY); 感谢各位的答复。问题已经解决。这里主要不是DC的问题。我之前所做的使用CDC绘都是没有问题的。但是,我的程序里面是使用GDI+绘的。就是根据一个DC产生Graphics对象来绘图的。我以为开始设置了DC对象就不用对Graphics对象进行设置了。结果浪费我N多时间。为戒。 图像变形问题(image warping) VC里面SQLConfigDataSource应该怎么用? hello world程序的问题,帮我看看 请教各位高手~~~ 哪位大哥用英文版的windows?告诉我,"公文包"在英版windows里叫什么? 请问怎么找回classview中的丢失类??急啊 问一个比较弱的问题,VC++中COMPILE和BUILD有什么区别?在线等。 数据问题 关于调试,帮一下忙,谢谢了. 如何保存printscreen截下的画面?谢谢 怎么在VC编辑框控件中写字 字体显示问题
DEVMODE* pDevMode = printDlg.GetDevMode();
pDevMode->dmOrientation = DMORIENT_PORTRAIT ;// 改为横向打印
pDevMode->dmPaperSize = DMPAPER_A4; // 纸张类型
pDevMode->dmPaperLength = 9000; // 纸张长度
pDevMode->dmPaperWidth = 14000; // 纸张宽度
pDevMode->dmScale = 1; // 缩放比例
pDevMode->dmPrintQuality = 1200; // 打印分辨率
pDevMode->dmYResolution = 1200;
dc.Attach(printDlg.GetPrinterDC());使用的不是MFC框架中的打印。对话库和OnPrint、BeginPrint等函数需要自己调用。
我愿意是想打A4大小的图,但是打出来的确实拇指那么大的图。在上面的m_i32PrintWidth, m_i32PrintHeight两个参数直接放大不行。AfxGetApp()->DoPrintDialog(&printDlg); DEVMODE* pDevMode = printDlg.GetDevMode(); pDevMode->dmYResolution = 1200;
dc.Attach(printDlg.GetPrinterDC());
LPDEVMODE lpDM = printDlg.GetDevMode(); dc.ResetDC(lpDM); 没有使用MFC的那一套,打印对话库 OnPrint OnBeginPrinting 等函数需要自己调用。
我设置了dpi为1200 可是
BitBlt(pViewDC->GetSafeHdc(), 0, 0, m_i32PrintWidth, m_i32PrintHeight, m_dcMem.GetSafeHdc(), 0, 0, SRCCOPY);
我愿意是想打A4大小的图,但是打出来的确实拇指那么大的图。在上面的m_i32PrintWidth, m_i32PrintHeight两个参数直接放大还是不行我这样放大对吗?
StretchBlt会放大m_dcMem中的小图, 但肯定会失真
应该会大很多。
在上面的m_i32PrintWidth, m_i32PrintHeight两个参数直接放大,我这样放大对吗?//肯定是不对的, pViewDC->GetSafeHdc(), ??这个不是打印机的dc吧?
BitBlt(pViewDC->GetSafeHdc(), 0, 0, m_i32PrintWidth, m_i32PrintHeight, m_dcMem.GetSafeHdc(), 0, 0, SRCCOPY);
pViewDC这个参数改变为打印机的DC。在屏幕绘出的时候pViewDC为View的DC,打印的时候pViewDC为打印机的DC,只是这个DC改变,其他都没有变动打印机的时候MemBitmap需要重新创建吗? 因为屏幕显示的时候只绘屏幕的大小,打印的时候A4纸好像大不少。
hPrinter, 打印机dc
hdc, hMemdc, 屏幕dc
bw, bh, 图片宽度、高度//得到打印机的分辨率
int print_ppix = GetDeviceCaps(hPrinter, LOGPIXELSX);
int print_ppiy = GetDeviceCaps(hPrinter, LOGPIXELSY);//得到屏幕的分辨率
int dc_ppix = GetDeviceCaps(hdc, LOGPIXELSX);
int dc_ppiy = GetDeviceCaps(hdc, LOGPIXELSY);//放大图片
StretchBlt(hMemdc, 0, 0, bw*(print_ppix/dc_ppix), bh*(print_ppiy/dc_ppiy),
hdc, 0, 0, bw, bh, SRCCOPY);//打印
BitBlt(hPrinter, 0, 0, bw*(print_ppix/dc_ppix), bh*(print_ppiy/dc_ppiy), hMemdc, 0, 0, SRCCOPY);
问题已经解决。这里主要不是DC的问题。我之前所做的使用CDC绘都是没有问题的。但是,我的程序里面是使用GDI+绘的。就是根据一个DC产生Graphics对象来绘图的。我以为开始设置了DC对象就不用对Graphics对象进行
设置了。结果浪费我N多时间。为戒。