Riesen Problem mit Bitmap drucken
-
Weiß denn echt niemand wie man ein ganz normales Bitmap ausdrucken kann?? Das kann doch echt nicht so schwer sein, das tun doch schließlich tausende Programme!! Bin für jede Hilfe dankbar!!!
-
Also, mit CDC bin ich nicht so fit, aber man kann doch von einem DC zum anderen kopieren (Stichwort MemoryDC).
Wie wäre es, wenn du nun das strechen in dem MemoryDC machst und das Ergebnis erst in den DruckerDC kopierst?
-
Ich mach ja im Grunde nix anderes als mit StretchBlt den DC zu kopieren. Ich habe jetzt bereits in mehreren Artikeln gelesen dass es Probeleme beim Drucken von Bitmaps gibt, aber irgendwie hat niemand eine Lösung...
-
is vielleicht der Drucker nicht kompatibel mit dem Bild? Farbtiefe usw. ...?
-
Hm, ich spekulier mal :p
Die ganze GDI (daher auch StretchBlt) ist Hardwareunabhängig.
Deshalb stimme ich dem "Ich glaub nicht jeder Drucker kann StretchBlt." nicht zu.
Vielleicht liegt es irgendwie am Netzwerkdruckertreiber (beim Drucken übers Netzwerk hatte ich daheim schon immer Probleme :))
-
Das Problem tritt auf mehreren Druckern auf, unter Codeproject gibt es einen Artikel dass man es mit "DIB Bitmaps" machen muss, jedoch hat mir das auch nicht weitergeholfen. Hier der Artikel:
http://www.codeguru.com/Cpp/G-M/bitmap/article.php/c1765
-
jo DIBs sind geräteunabhängig, unterstützt meine These
-
glaube schrieb:
Ich glaub nicht jeder Drucker kann StretchBlt.
jo, so ähnlich ist es richtig, so weit ich weis. Das eigentliche Problem scheint zu sein, daß nicht jeder device driver den BitBlt ab kann, auf den sich der StretchBlt abstützt.
Not all devices support the BitBlt function. For more information, see the RC_BITBLT raster capability entry in the GetDeviceCaps function as well as the following functions: MaskBlt, PlgBlt, and StretchBlt.
Siehe: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_0fzo.asp
Probier mal den BitBlt als GDI funktion auf zu rufen. Wenn das nicht geht, hol dir wie in der MSDN Doku beschrieben mit GetDescieCaps die Raster capitilitys, da siehst du wie das device(Drucker) die Daten gerastert haben will. Über die GetDeviceCaps funktion kannst du dir alle Infos über deinen Drucker holen und den BitBlt danach einstellen, bzw deine zu druckende BITMAP.
Kann sein das er nur nicht den StretchBlt ab kann.Edit: Bei der Gelegenheit, weis einer wie man mit dem StretchBlt dithern kann? Ich suche eine Möglichkeit 8-bit images nach der colorreduction zu dithern. Hab gelesen(MSDN), daß der StretchBlt das können soll, aber wie?
Greetings codeman
-
Alles klar, werde das mal versuchen das umzusetzen. Falls mir jemand etwas Code posten könnte währe das aber Klasse, bin mir net sicher ob ichs hinbekomme!
-
Falls du sie noch nicht kennst (vielleicht ist ja was dabei):
Unix-Tom (am 22 März 2005 16:46) schrieb:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-54279.html
Ein Bild wird auf einem Drucker genauso gezeichnet wie auf den Bildschirm.
Übergibt der o.a. Klasse deinen DC und gut ist es.[edit]...und noch mal herausgenommen...
http://www.c-plusplus.net/forum/viewtopic-var-t-is-54279.html [/edit]http://www.c-plusplus.net/forum/viewtopic-var-t-is-99291-and-highlight-is-*drucken*+*drucker*.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-75769-and-highlight-is-*drucken*+*drucker*.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-5898-and-highlight-is-*drucken*+*drucker*.html