Вывод bmp на печать.
От: OlegGorn  
Дата: 08.01.03 11:29
Оценка:
Мастера!
Есть bmp (Width, Height).
Пытаюсь вывести на принтер так, чтобы bmp лег на весь лист.
Пытался делать масштабирование с учетом границ принтера. То ему не хватает ресурсов, то не хочет. ???

08.01.03 16:21: Перенесено модератором из 'C/C++' в WinAPI — ХД
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 ;
}
Re: Вывод bmp на печать.
От: Patalog Россия  
Дата: 09.01.03 07:07
Оценка:
Здравствуйте, OlegGorn, Вы писали:

Ежели принтеру действительно не хватает ресурсов, тады только уменьшать разрешение.
Почетный кавалер ордена Совка.
Re: Вывод bmp на печать.
От: viya  
Дата: 09.01.03 07:48
Оценка:
Здравствуйте, OlegGorn, Вы писали:

OG>Мастера!

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

//настраиваем принтер
StartDoc(HDC);
StartPage(HDC);
//в img загружаем необходимый bmp
//вывод на печать bmp с масштабированием
hdc_pic:=CreateCompatibleDC(HDC);
if SelectObject(hdc_pic,img.Picture.Bitmap.Handle)<>0
then
 StretchBlt(HDC,0,0,page_width,page_height,hdc_pic,0,0,img.Picture.Bitmap.Width,img.Picture.Bitmap.Height,SRCCOPY);
EndPage(HDC);
EndDoc(HDC);
//выгружаем принтер


если что пиши, я с этим работала
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.