Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild ! (https://www.delphipraxis.net/159553-beim-ausdrucken-einer-bitmap-erhalte-ich-ein-kleins-bild.html)

thomas2009 1. Apr 2011 18:23

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:
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;
Bei mir kommt das Bild mit meinem Programm beim Ausdrucken 4x kleiner!

Sir Rufo 1. Apr 2011 18:32

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

Satty67 1. Apr 2011 19:34

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.

himitsu 1. Apr 2011 19:43

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
 
Entweder du paßt das Bild an den Drucker an (Delphi-Referenz durchsuchenStretchDraw)
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")

Bummi 1. Apr 2011 19:49

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
 
Liste der Anhänge anzeigen (Anzahl: 1)
Man kann auch direkt das Canvas manipulieren

thomas2009 1. Apr 2011 23:13

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
 
So habe ich versucht :
Delphi-Quellcode:
// 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.
Nun hier ist mein Form, die die Unit oben aufruft :
Delphi-Quellcode:
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.
Wie ich sehe ich muss bei Ausdruck-Vorschau eine andere Image verwenden. (eine Kopie von Image1) oder ?

Sir Rufo 1. Apr 2011 23:39

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

Bummi 2. Apr 2011 07:43

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
 
"Neque mittatis margaritas vestras ante porcos."

Matthäus 7, 6

thomas2009 2. Apr 2011 17:41

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
 
Ich habe versucht mit diesem Code:
Delphi-Quellcode:
SetCanvasZoomAndRotation(Printer.Canvas,1,180,0,0);
Ich erhalte Fehler : Der Drucker druckt aktuell nicht !!

Daniel 2. Apr 2011 17:43

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 (http://docwiki.embarcadero.com/RADStudio/en/Main_Page) ist mittlerweile wieder auf einem Stand, der keine Ausreden zulässt.

Du zeigst NULL Eigeninitiative und daher mache ich auch dieses Thema wieder zu.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz