AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !
Thema durchsuchen
Ansicht
Themen-Optionen

Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !

Ein Thema von thomas2009 · begonnen am 1. Apr 2011 · letzter Beitrag vom 2. Apr 2011
Thema geschlossen
thomas2009
(Gast)

n/a Beiträge
 
#1

Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !

  Alt 1. Apr 2011, 18:23
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!

Geändert von thomas2009 ( 1. Apr 2011 um 18:25 Uhr)
 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !

  Alt 1. Apr 2011, 18:32
Kleiner Tip, der auf die Lösung verweist:

Die Größe ist (auf diesem Weg) auch abhängig vom Drucker
Stichwort DPI
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
 
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !

  Alt 1. Apr 2011, 19:34
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.
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#4

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !

  Alt 1. Apr 2011, 19:43
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")
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
 
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !

  Alt 1. Apr 2011, 19:49
Man kann auch direkt das Canvas manipulieren
Angehängte Dateien
Dateityp: zip ExCanvasTools.zip (829 Bytes, 33x aufgerufen)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
 
thomas2009
(Gast)

n/a Beiträge
 
#6

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !

  Alt 1. Apr 2011, 23:13
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 ?
 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !

  Alt 1. Apr 2011, 23:39
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
 
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !

  Alt 2. Apr 2011, 07:43
"Neque mittatis margaritas vestras ante porcos."

Matthäus 7, 6
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
 
thomas2009
(Gast)

n/a Beiträge
 
#9

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !

  Alt 2. Apr 2011, 17:41
Ich habe versucht mit diesem Code:
SetCanvasZoomAndRotation(Printer.Canvas,1,180,0,0); Ich erhalte Fehler : Der Drucker druckt aktuell nicht !!
 
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Beim Ausdrucken einer Bitmap, erhalte ich ein kleins Bild !

  Alt 2. Apr 2011, 17:43
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
 
Thema geschlossen


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 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