печать растрового изображения с GDI + искажается - PullRequest
0 голосов
/ 22 июня 2019

Итак, я пытаюсь напечатать одностраничный документ. Я в основном рисую текст и растровые изображения в формате bitting на растровом изображении размера страницы, а затем встраиваю растровое изображение THAT в DC

принтера

nPixWidth = 5100 и nPixHeight = 6600, так как же растровое изображение 445 x 1092 занимает ВСЕ верхнюю часть страницы? Мол, какого черта? Что мне здесь не хватает?

Мне не нужно использовать GDI +. Я мог бы использовать DrawText и BitBlt или StretchBlt, но я думал, что GDI + будет лучше.

    int nPixWidth = GetDeviceCaps(m_hPrinterDC, PHYSICALWIDTH), nPixHeight = GetDeviceCaps(m_hPrinterDC, PHYSICALHEIGHT);
    int nPixMarginWidth = GetDeviceCaps(m_hPrinterDC, PHYSICALOFFSETX), nPixMarginHeight = GetDeviceCaps(m_hPrinterDC, PHYSICALOFFSETY);
//  int nDPI = nPixHeight / GetDeviceCaps(m_hPrinterDC, )
    Bitmap myBitmap(nPixWidth - nPixMarginWidth, nPixHeight - nPixMarginHeight, PixelFormat32bppARGB);
    HBITMAP hLogoBmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP_THELOGO_HORZ), IMAGE_BITMAP, 0, 0, 0);  // 445 x 1092
    GetPaperDimensions(m_cReportOptions.m_devMode.dmPaperSize, m_fPageWidth, m_fPageHeight);
    Graphics printer(m_hPrinterDC); 
    Graphics page(&myBitmap);
    Bitmap *pBmpLogo = Bitmap::FromHBITMAP(hLogoBmp, NULL);
    int nLogoWidth = pBmpLogo->GetWidth(), nLogoHeight = pBmpLogo->GetHeight();
    SolidBrush whiteBrush(Color(255, 255, 255));
    page.FillRectangle(&whiteBrush, 0, 0, nPixWidth - nPixMarginWidth, nPixHeight - nPixMarginHeight);
    page.DrawImage(pBmpLogo, 0, 0, nLogoWidth, nLogoHeight);
    printer.DrawImage(&myBitmap, 0, 0); // , (INT)nPixWidth, (INT)nPixHeight);
    DeleteObject(hLogoBmp);
    delete pBmpLogo;
...