打印出来的图很小,怎么弄才能正常? 网上找了一些答案,但是试了多种方法还是不行。

解决方案 »

  1.   

    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等函数需要自己调用。
      

  2.   

    一般是比较小,用strechbitblt放大了再打印.................
      

  3.   

    打印机一般大于300dpi(也就是300x300的才是1寸x1寸)
      

  4.   

    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 等函数需要自己调用。 
      

  5.   

    还有就是我使用模拟的打印机图形还有点正常,使用实现的打印机机器就只有拇指大了。
    我设置了dpi为1200  可是
    BitBlt(pViewDC->GetSafeHdc(), 0, 0, m_i32PrintWidth, m_i32PrintHeight, m_dcMem.GetSafeHdc(), 0, 0, SRCCOPY);
    我愿意是想打A4大小的图,但是打出来的确实拇指那么大的图。在上面的m_i32PrintWidth, m_i32PrintHeight两个参数直接放大还是不行我这样放大对吗? 
      

  6.   

    m_dcMem中的位图也放大了吗?
    StretchBlt会放大m_dcMem中的小图, 但肯定会失真
      

  7.   

    你把dpi设置为300。
    应该会大很多。
    在上面的m_i32PrintWidth, m_i32PrintHeight两个参数直接放大,我这样放大对吗?//肯定是不对的,  pViewDC->GetSafeHdc(), ??这个不是打印机的dc吧?
      

  8.   

    我程序里面关于绘的东西所有都没有变动,只是在绘出的时候
    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纸好像大不少。
      

  9.   

    我分析是分辨率的原因,显示器的分辨率远远要小于打印机,所以如果按正常的打印方式肯定是要变小的,下面是我的解决办法: 
    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); 
      

  10.   

    感谢各位的答复。
    问题已经解决。这里主要不是DC的问题。我之前所做的使用CDC绘都是没有问题的。但是,我的程序里面是使用GDI+绘的。就是根据一个DC产生Graphics对象来绘图的。我以为开始设置了DC对象就不用对Graphics对象进行
    设置了。结果浪费我N多时间。为戒。