druckproblem auf laserdrucker
-
hi leute .. ich hab nen problem habe heute nen neuen farblaser drucker bekommen...
ich habe nen tool zum cover drucken geschrieben allerdings druckt er mir jetzt nurnoch den schwarzen rahmen und nicht mehr das bild in die mitte .. auf meinem tintenpisser hat es funktioniert .. jemand ne ideefloat breite1,hoehe1; int breite,hoehe,x,y; PrintDialog1->Execute(); TPrinter *Prntr = Printer(); Prntr->Orientation=poLandscape; breite1=StrToFloat(27.2)/(20.2/Prntr->PageHeight); hoehe1=StrToFloat(18.3)/(29.0/Prntr->PageWidth); breite=breite1; hoehe=hoehe1; Application->MessageBox(FloatToStr(breite).c_str(),FloatToStr(hoehe).c_str(),MB_OK); Prntr->Title="Cover " + C_Name->Text + " (" + C_CDNr->Text + ")" ; Prntr->BeginDoc(); Prntr->Canvas->Brush->Color=clBlack; Prntr->Canvas->Rectangle(116,116,breite+124,hoehe+124); Prntr->Canvas->Brush->Color=clWhite; Prntr->Canvas->Rectangle(118,118,breite+122,hoehe+122); Prntr->Canvas->Brush->Color=clBlack; Prntr->Canvas->StretchDraw(Rect(120,120,breite+120,hoehe+120),Image2->Picture->Graphic); Prntr->EndDoc();
-
Macht der das auch, wenn Du die Pixel 1:1 druckst (nicht skaliert)?
Ich hatte das mit SW-Lasern schon mal, war etwas Treiber abhaengig.
Bei 1:1 hat's meist geklappt.Ne Loesung wuerde mich auch interessieren.
-
ich habe es auch mit copy rect versucht das hat auch nicht funktioniert ... jetzt versuche ich es jedes pixel einzeln zu seitzen mit zwei verschlachtelten schleifen .. allerdings is mein druckaufrtag dan 2,44 gb groß .. das kann ja net sein .... wenn ich nen kleinen berich nehmen von 500 pixeln hat es da geklappt ... jedenfalls manchmal .... also auch nicht bei allen Timages .. bei einem ja bei dem anderen nicht .. ich weiss allerdings net warum
-
Hast Du mal die WinAPI- Funktionen benutzt?
-
leider habe ich keien api funktiln gefunden.
allerdingd hat es folgendermaßen geklappt das canvas als bitmap speichern und erneut laden, danach hat er auch gedruckt!!!aber ich fände es super wenn jemand mal nen beispiel für ne api funktion posten könnte
-
TPoint Points[3]; Points[0].x=0;//LiOb Points[0].y=Pic->Width*Dimension->ImageZoom; Points[1].x=0;//ReOb Points[1].y=0; Points[2].x=Pic->Height*Dimension->ImageZoom;//LiUn Points[2].y=Pic->Width*Dimension->ImageZoom; Res=PlgBlt( BM->Canvas->Handle,// handle to destination device context Points, // vertices of destination parallelogram BM->Canvas->Handle,// handle to source device context 0, // x-coord. of upper-left corner of source rect. 0, // y-coord. of upper-left corner of source rect. Pic->Width*Dimension->ImageZoom,// width of source rectangle Pic->Height*Dimension->ImageZoom,// height of source rectangle NULL, // handle to bitmask 0, // x-coord. of upper-left corner of bitmask rect. 0 // y-coord. of upper-left corner of bitmask rect. );
in Pic (Picture) ist eine Graphik.
in BM (TBitmap) kommt das ergebnis (Groesse muss eingestellt werden - ist hier weggelassen!)
in Dimension->ImageZoom hab ich nen Skalierfaktor (double)
Die Graphic aus Pic wird gedreht in BM gezeichnet mit Zoomfaktor.
In Points sind 3 Ecken fuer das Zielbild.
Geht auch mit:
Points[0].x=Pic->WidthDimension->ImageZoom-1;//LiOb
Points[0].y=Pic->HeightDimension->ImageZoom-1;
Points[1].x=0-1;//ReOb
Points[1].y=Pic->HeightDimension->ImageZoom-1;
Points[2].x=Pic->WidthDimension->ImageZoom-1;//LiUn
Points[2].y=0-1;
oder ...Schau mal in Winapi- hilfe!
-
Suchfunktion benutzen! Z.B.
http://c-plusplus.net/forum/viewtopic-var-t-is-95928-and-highlight-is-laser.html