Здравствуйте, 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 ;
}