Re: Вывод bmp на печать.
От: Carface Россия  
Дата: 09.01.03 01:41
Оценка:
Здравствуйте, OlegGorn, Вы писали:

OG>Есть bmp (Width, Height).

OG>Пытаюсь вывести на принтер так, чтобы bmp лег на весь лист.
OG>Пытался делать масштабирование с учетом границ принтера. То ему не хватает ресурсов, то не хочет. ???

Огласите свой код пожалуйста !

такой должен работать

void PrintDIB(BITMAPINFO *bmi, char *data)
{
 RECT cr = { 0,0, 4674,4674 } ; // 600dpi, A4
 static DOCINFO di = { sizeof (DOCINFO), "My Picture", NULL } ;
 HDC  hdcPrint ;

  hdcPrint = GetPrinterDC () ;

//   Так можно определить размер листа и разрешение принтера
//   hs  = GetDeviceCaps(hdcPrint,HORZSIZE) ;
//   vs  = GetDeviceCaps(hdcPrint,VERTSIZE) ;
//   hr  = GetDeviceCaps(hdcPrint,HORZRES) ;
//   vr  = GetDeviceCaps(hdcPrint,VERTRES) ;

  if (hdcPrint != NULL){
   if (StartDoc (hdcPrint, &di) > 0){
    if (StartPage (hdcPrint) > 0){
     StretchDIBits(hdcPrint,cr.left,cr.top,cr.right,cr.bottom,0,0,bmi->bmiHeader.biWidth,bmi->bmiHeader.biHeight,data,bmi,DIB_RGB_COLORS,SRCCOPY) ;

     EndPage (hdcPrint) ;
    }
    EndDoc (hdcPrint) ;
   }
   DeleteDC (hdcPrint) ;
  }
}

HDC GetPrinterDC (void)
{
 PRINTER_INFO_5 pinfo5[3] ;
 DWORD dwNeeded, dwReturned ;

  if (EnumPrinters (PRINTER_ENUM_DEFAULT, NULL, 5, (LPBYTE) pinfo5,
      sizeof (pinfo5), &dwNeeded, &dwReturned))
 return CreateDC (NULL, pinfo5[0].pPrinterName, NULL, NULL) ;

 return 0 ;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.