【问题标题】:MFC Printing bitmap only prints in blackMFC 打印位图仅以黑色打印
【发布时间】:2021-03-31 15:29:03
【问题描述】:

我有以下方法来打印一个完美的位图,但现在它将位图的区域全部打印为黑色。我已经测试了我的测试应用程序,该应用程序是在另一台 PC 上的我的 PC 上编译的,它完美地打印了位图。我已经对其进行了调试,它正在打开位图文件,因为它读取了正确的尺寸。我不知道发生了什么,任何建议将不胜感激。提前致谢。

void CTestAppPrintDlg::OnBnClickedButton1()
{

    CString path;

    path = "Test1.bmp";
    PrintBitmap(path);
} 

void CTestAppPrintDlg::PrintBitmap(LPCTSTR filename) {
CPrintDialog printDlg(FALSE);
printDlg.GetDefaults();
  return; 
CDC dc;
if (!dc.Attach(printDlg.GetPrinterDC())) {
    AfxMessageBox(_T("No printer found!")); return;
}

dc.m_bPrinting = TRUE;
DOCINFO di;
// Initialise print document details
::ZeroMemory(&di, sizeof(DOCINFO));
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = filename;
BOOL bPrintingOK = dc.StartDoc(&di); // Begin a new print job 
// Get the printing extents
// and store in the m_rectDraw field of a 
// CPrintInfo object
CPrintInfo Info;
Info.SetMaxPage(1); // just one page 
int maxw = dc.GetDeviceCaps(HORZRES);
int maxh = dc.GetDeviceCaps(VERTRES);
Info.m_rectDraw.SetRect(0, 0, maxw, maxh);
for (UINT page = Info.GetMinPage(); page <=
    Info.GetMaxPage() && bPrintingOK; page++) {
    dc.StartPage();    // begin new page
    Info.m_nCurPage = page;
    CBitmap bitmap;
    // LoadImage does the trick here, it creates a DIB section
    // You can also use a resource here
    // by using MAKEINTRESOURCE() ... etc. 
    if (!bitmap.Attach(::LoadImage(
        ::GetModuleHandle(NULL), filename, IMAGE_BITMAP, 0, 0,
        LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE))) {
        AfxMessageBox(_T("Error loading bitmap!")); return;
    }
    BITMAP bm;
    bitmap.GetBitmap(&bm);
    int w = bm.bmWidth;
    int h = bm.bmHeight;
    // create memory device context
    CDC memDC;
    memDC.CreateCompatibleDC(&dc);
    CBitmap *pBmp = memDC.SelectObject(&bitmap);
    memDC.SetMapMode(dc.GetMapMode());
    dc.SetStretchBltMode(HALFTONE);
    // now stretchblt to maximum width on page
    dc.StretchBlt(0, 0, w, h, &memDC, 0, 0, w, h, SRCCOPY);
    // clean up
    memDC.SelectObject(pBmp);
    bPrintingOK = (dc.EndPage() > 0);   // end page
}
if (bPrintingOK)
    dc.EndDoc(); // end a print job
else dc.AbortDoc();           // abort job. 

}

【问题讨论】:

    标签: c++ printing bitmap mfc


    【解决方案1】:

    感谢给我负面评价的人。这很有帮助!

    我发现这与我的代码无关,原因是 Windows 更新 KB5000802。我卸载了这个更新,它现在可以工作了。

    【讨论】:

    • 你能不能让它工作。但更新旨在改进系统并使其更加安全。因此,您可能需要进一步调查。它让我想起了一些在计算机上运行以防止隐私问题的应用程序,当您尝试进行屏幕抓取时,它们会“屏蔽”视图。也许反病毒的一些设置也做同样的事情。我知道你说的反对票是什么意思。我不认为它们在恕我直言中有用。通过评论进行建设性的批评要好得多。但我想反对票确实是有目的的。有些问题有时真的很糟糕。 :)
    • 感谢您的回复,Windows 更新 KB5000802 存在打印和打印机驱动程序的已知问题 Microsoft 已发布更新以纠正此问题windowslatest.com/2021/03/16/…
    猜你喜欢
    • 2015-06-02
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多