![]() |
Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
Hi
wenn ich mit meinem Delphi programm die Bitmap ausdruke, dann kommt ein kleines Bild raus ! Und wenn ich das selbe Bitmap mit einem anderem Programm dann bekomme ich eine andere Groesse beim Ausdrucken ! Von Program zum Programm ist unterschiedlich !
Delphi-Quellcode:
Bei mir kommt das Bild mit meinem Programm beim Ausdrucken 4x kleiner!
procedure TForm1.Button17Click(Sender: TObject);
begin with Printer do begin BeginDoc; { Beginn des Druckens } Canvas.Draw(0,0,Image1.Picture.Bitmap); EndDoc; { Ende des Druckens } end; end; |
AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
Kleiner Tip, der auf die Lösung verweist:
Die Größe ist (auf diesem Weg) auch abhängig vom Drucker ;) Stichwort DPI |
AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
Das wird sicher wieder endlos ;)
Deshalb eine kurze Ablaufbeschreibung, wie ich es bei einem BitMap ohne Informationen über die Quell-Bildgröße machen würde: - mit GetDeviceCaps Papiergröße des Druckers ermitteln - Ein Ausgabe-Rectangle berechnen (Seitenverhältnis beachten, auf Papiergröße skalieren oder ander gewünschte Zielgröße berücksichtigen) - Mit StrechDraw ausgeben, u.U. per API um Halftone zu nutzen Mit den entsprechenden Suchbegriffen lässt sich jetzt sicher sogar ein fertiges Code-Beispiel finden. |
AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
Entweder du paßt das Bild an den Drucker an (
![]() oder du paßt den Drucker an das Bild an.
Delphi-Quellcode:
SetMapMode(Printer.Canvas.Handle, Modus);
// Modus: //   MM_HIENGLISH   1 Pixel = 0.001 inch //   MM_LOENGLISH   1 Pixel = 0.01  inch //   MM_HIMETRIC    1 Pixel = 0.01  millimeter //   MM_LOMETRIC    1 Pixel = 0.1   millimeter //   MM_TEXT        each logical unit(pixel) is mapped to one device pixel //   MM_TWIPS       each logical unit is mapped to one twentieth of a printer's point (1/1440 inch, also called a "twip") |
AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
Liste der Anhänge anzeigen (Anzahl: 1)
Man kann auch direkt das Canvas manipulieren
|
AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
So habe ich versucht :
Delphi-Quellcode:
Nun hier ist mein Form, die die Unit oben aufruft :
// print Unit, was Du vorschlägt
unit ExCanvasTools; // 20100915 by Thomas Wassermann // www.explido-software.de interface uses Windows, SysUtils, Classes, Graphics; Function Grad2Rad(w:Double):Double; Procedure PaintGraphic(ACanvas:TCanvas;x,y:Integer;AGraphic:TGraphic;Faktor,Winkel:Double;PosIsCenter:Boolean=false); Procedure PaintText(ACanvas:TCanvas;Const s:String;x,y:Integer;Faktor,Winkel:Double;PosIsCenter:Boolean=false); Procedure ResetCanvas(ACanvas:TCanvas); procedure SetCanvasZoomAndRotation(ACanvas: TCanvas;Zoom:Double;Angle:Double;CenterpointX,CenterpointY:Double); implementation Function Grad2Rad(w:Double):Double; begin Result := w / 360 * PI *2; end; Procedure PaintText(ACanvas:TCanvas;Const s:String;x,y:Integer;Faktor,Winkel:Double;PosIsCenter:Boolean=false); var px,py:Integer; begin SetCanvasZoomAndRotation(ACanvas , Faktor, Winkel, x,y); if PosIsCenter then begin px := Round( ACanvas.TextWidth(s) / 2 ); py := Round( ACanvas.TextHeight(s) / 2 ); end else begin px := 0; py := 0; end; ACanvas.TextOut(-px ,-py ,s); ResetCanvas(ACanvas); end; Procedure PaintGraphic(ACanvas:TCanvas;x,y:Integer;AGraphic:TGraphic;Faktor,Winkel:Double;PosIsCenter:Boolean=false); var px,py:Integer; begin if PosIsCenter then begin px := Round( AGraphic.Width / 2 ); py := Round( AGraphic.Height / 2 ); end else begin px := 0; py := 0; end; SetCanvasZoomAndRotation(ACanvas , Faktor, Winkel, x , y ); ACanvas.Draw(-px ,-py ,AGraphic); ResetCanvas(ACanvas); end; Procedure ResetCanvas(ACanvas:TCanvas); begin SetCanvasZoomAndRotation(ACanvas , 1, 0, 0,0); end; Procedure SetCanvasZoomAndRotation(ACanvas:TCanvas;Zoom:Double;Angle:Double;CenterpointX,CenterpointY:Double); var form : tagXFORM; Winkel:Double; begin Winkel := Grad2Rad(Angle); SetGraphicsMode(ACanvas.Handle, GM_ADVANCED); SetMapMode(ACanvas.Handle,MM_ANISOTROPIC); form.eM11 := Zoom * cos( Winkel); form.eM12 := Zoom *Sin( Winkel) ; form.eM21 := Zoom * (-sin( Winkel)); form.eM22 := Zoom * cos( Winkel) ; form.eDx := CenterpointX; form.eDy := CenterpointY; SetWorldTransform(ACanvas.Handle,form); end; end.
Delphi-Quellcode:
Wie ich sehe ich muss bei Ausdruck-Vorschau eine andere Image verwenden. (eine Kopie von Image1) oder ?
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ExCanvasTools{Externe unit im delben ordner}; type TForm1 = class(TForm) image1: TImage; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin SetCanvasZoomAndRotation(Image1.Canvas,2,30,0,0); end; end. |
AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
Liebe Schüler,
schlagen Sie bitte die Begriffe "Paint" und "Graphic" nach und bringen Sie diese in Zusammenhang mit den Anforderungen aus dem ersten Thread. Guts Nächtle |
AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
"Neque mittatis margaritas vestras ante porcos."
Matthäus 7, 6 |
AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
Ich habe versucht mit diesem Code:
Delphi-Quellcode:
Ich erhalte Fehler : Der Drucker druckt aktuell nicht !!
SetCanvasZoomAndRotation(Printer.Canvas,1,180,0,0);
|
AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
Thomas - es hilft alles nichts.
Wenn Du zu stabilen Ergebnissen kommen möchtest, dann musst Du Dich jeweils mit dem Thema befassen und nicht nur irgendwelche Lösungen wild zusammen kopieren. Die korrekten Stichworte wurden Dir genannt und wenn Du bei Google "delphi print bitmap" eingibst, sind unter den zehn ersten Treffern schon bessere Lösungen als das, was Du Dir von irgendwelchen Quellen organisiert hast. Es überrascht - auch mich - immer wieder, aber Programmierung ist auch heutzutage noch Arbeit. Man stelle sich das vor. Wenn man auf Funktionen stößt, von denen man zuvor noch nie gehört hat (was durchaus passieren kann), dann muss man eben einen Blick in die Hilfe werfen. Das Hilfe-WIKI von Embarcadero ( ![]() Du zeigst NULL Eigeninitiative und daher mache ich auch dieses Thema wieder zu. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz