как напечатать картинку?
От: ksd Россия  
Дата: 15.02.17 14:29
Оценка:
как напечатать картинку с помощью WINAPI? имеется в виду что то нативное для винды. особенно надо JPEG (если требуется долгий рассказ, как ее загрузить и сконвертить в съедобный для WINAPI формат, то его приводить не надо).

вот так все понятно:

void PrintPic(LPCTSTR fileName)
{
    HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,fileName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE|LR_VGACOLOR);
    PRINTDLG prDlg;
    memset( &prDlg, 0, sizeof(  prDlg  ) );
    prDlg.lStructSize = sizeof(  prDlg  );
    prDlg.Flags = PD_RETURNDC;
    if( !PrintDlg( & prDlg  ) ) return;
    DOCINFO  document_Information;
    HDC hPrinter =  prDlg.hDC;
    memset( &document_Information , 0, sizeof( document_Information ) );
    document_Information.cbSize = sizeof(  document_Information  );
    StartDoc( hPrinter, &document_Information  );
    StartPage( hPrinter );
    HDC hdcMem = 0;
    HBITMAP hbmOld = 0;
    if (hBitmap)
    {
        int bxWidth, bxHeight;
        BITMAP bitmap;
        GetObject(hBitmap,sizeof(BITMAP),&bitmap);
        bxWidth = bitmap.bmWidth;
            bxHeight = bitmap.bmHeight;
        int cxpage = GetDeviceCaps (hPrinter, HORZRES);
        int cypage = GetDeviceCaps (hPrinter, VERTRES);
        hdcMem = CreateCompatibleDC(hPrinter);
        hbmOld = (HBITMAP)SelectObject(hdcMem, hBitmap);
        SetMapMode (hPrinter, MM_ISOTROPIC);
            SetWindowExtEx(hPrinter, cxpage,cypage, NULL);
            SetViewportExtEx(hPrinter, cxpage, cypage,NULL);
            SetViewportOrgEx(hPrinter, 0, 0, NULL);
            StretchBlt(hPrinter, 0, 0, cxpage, cypage, hdcMem, 0, 0,bxWidth,bxHeight, SRCCOPY);
    }
    EndPage( hPrinter );
    EndDoc( hPrinter );
    DeleteDC( hPrinter );
    SelectObject(hdcMem, hbmOld);
    DeleteDC(hdcMem);
}


возможно, есть другие пути?
#winapi #печать #cpp #c++
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.