StretchDIBits auf einen druckerDC
-
hallo
ich möchte ein kleines scannprogramm schreiben. scannen klappt schon, nur drucken
nicht.ich habe einen zeiger auf die bits die ich setzten möchte, sowie eine BITMAPINFO
die die daten des DIBs enthällt. die werte sind auch alle gültig. jetzt will
ich die daten mit StretchDIBits in den druckerDC kopieren. rückgabewert ist 0,
und GetLastError liefert "ERROR_INSUFFICIENT_BUFFER" mit der beschreibung:
"The data area passed to a system call is too small."ich vermute man kann die daten nicht so einfach rüberkopieren.
das ergebniss ist einfach ein leeres blatt
der code:
PRINTDLG printdlg; DWORD printflags = PD_ALLPAGES | PD_COLLATE | PD_RETURNDC | PD_NOSELECTION | PD_PRINTSETUP; ZeroMemory(&printdlg, sizeof(printdlg)); printdlg.lStructSize = sizeof(printdlg); printdlg.hwndOwner = 0; printdlg.Flags = printflags; printdlg.nCopies = 1; if (PrintDlg(&printdlg)) { DOCINFO di = {sizeof(DOCINFO), "Scanner"}; if (StartDoc(printdlg.hDC, &di) > 0) { if (StartPage(printdlg.hDC) > 0) { long xres = GetDeviceCaps(printdlg.hDC, HORZRES); long yres = GetDeviceCaps(printdlg.hDC, VERTRES); BITMAPINFO bmi; bmi.bmiHeader = *pheader; // pheader ist vom scanner StretchDIBits(printdlg.hDC, 0, 0, xres, yres, 0, 0, width, height, pbits, 0, 0, SRCCOPY); // pbits, width und height auch EndPage(printdlg.hDC); } EndDoc(printdlg.hDC); } DeleteDC(printdlg.hDC); }
was mache ich falsch?
-
mittlerweile hab ich mal eine bitmap im drucker dc erzeugt, hat jedoch nichts
gebrachtlong xres = GetDeviceCaps(printdlg.hDC, HORZRES); long yres = GetDeviceCaps(printdlg.hDC, VERTRES); BITMAPINFO bmi; bmi.bmiHeader = *pheader; HBITMAP bmp = CreateCompatibleBitmap(printdlg.hDC, xres + 1, yres + 1); HGDIOBJ old = SelectObject(printdlg.hDC, bmp); StretchDIBits(printdlg.hDC, 0, 0, xres, yres, 0, 0, width, height, pbits, 0, 0, SRCCOPY); SelectObject(printdlg.hDC, old); DeleteObject(bmp);
-
alle normalen funktionen wie textout oder lineto funktionieren, nur keine
kopierfunktionen
-
Du hast BITMAPINFO (sollte der Parameter nach pbits sein) gar nicht gesetzt?
(Eine Bitmap in einen Printer-DC zu selektieren macht btw überhaupt keinen Sinn)