Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   GDI+: Image drucken (https://www.delphipraxis.net/161598-gdi-image-drucken.html)

Jazzman_Marburg 11. Jul 2011 19:23

GDI+: Image drucken
 
Hallo zusammen!
Ich stehe gerade mal wieder auf dem Schlauch -- vielleicht könnt ihr helfen:
Ich habe mit GDI+ nun mein Image (gImage vom Typ IGPImage) fertig und möchte es nun drucken. Zu meiner GDI+ Library gibt es auch ein schönes Beispiel, wie man sowas bewerkstelligen könnte -- aber ich versteh das Demo-Beispiel nicht :oops::
Delphi-Quellcode:
var
  PrinterGraphics: IGPGraphics;
  Pen: IGPPen;
begin
  Printer.BeginDoc;
  PrinterGraphics := TGPGraphics.Create(Printer.Handle);
  Pen := TGPPen.Create(TGPColor.Black);
  PrinterGraphics.DrawRectangle(Pen, 200, 500, 200, 150);
  PrinterGraphics.DrawEllipse(Pen, 200, 500, 200, 150);
  PrinterGraphics.DrawLine(Pen, 200, 500, 400, 650);
  Printer.EndDoc;
end;

Das Printer.Handle habe ich (PrintDialog) aber die anderen Zeilen zwischen Printer.BeginDoc und Printer.EndDoc sind mir unklar: mein gImage enthält doch schon das Bild, will ja nicht nochmal das Ganze Zeichnen-Geraffel ausführen, oder muß ich das?!
Das Demo sagt hierzu:
[I]"In the preceding code, the three GDI+ drawing commands are in between calls to the Printer.BeginDoc and Printer.EndDoc methods. All graphics commands between BeginDoc and EndDoc are routed to a temporary metafile. After the call to EndDoc, the printer driver converts the data in the metafile into the format required by the specific printer being used."[/I]

Verstehe nicht, was ich jetzt mit meinem fertigen gImage tun soll...

Jemand eine Idee?

Danke & Gruß
Jazzman

daywalker9 11. Jul 2011 19:47

AW: GDI+: Image drucken
 
Es wird einfach nur ein Image erzeugt, was zum Drucker geschickt werden kann.


Du musst im Grunde nur zwischen dem BeginDoc und EndDoc dein aktuelles Image auf die PrinterGraphics kopieren.

Hab grad nicht den GDI Krams zur Hand, um dir zu sagen wie das hier funktioniert.

Jazzman_Marburg 11. Jul 2011 20:20

AW: GDI+: Image drucken
 
Zitat:

Zitat von daywalker9 (Beitrag 1111209)
Du musst im Grunde nur zwischen dem BeginDoc und EndDoc dein aktuelles Image auf die PrinterGraphics kopieren.

Jepp -- nur wie? :stupid:

Jazzman

EWeiss 11. Jul 2011 20:44

AW: GDI+: Image drucken
 
Zitat:

aber die anderen Zeilen zwischen Printer.BeginDoc und Printer.EndDoc sind mir unklar:
Delphi-Quellcode:
Pen := TGPPen.Create(TGPColor.Black);
PrinterGraphics.DrawRectangle(Pen, 200, 500, 200, 150);
PrinterGraphics.DrawEllipse(Pen, 200, 500, 200, 150);
PrinterGraphics.DrawLine(Pen, 200, 500, 400, 650);
Was ist da unklar?
Du erstellst einen Zeichenstift mit der Farbe schwarz
und zeichnest anschließend ein Rechteck, Ellipse und eine Linie mit der angegebenen Farbe

gruss

Jazzman_Marburg 11. Jul 2011 20:55

AW: GDI+: Image drucken
 
Zitat:

Zitat von EWeiss (Beitrag 1111221)
Was ist da unklar?
Du erstellst einen Zeichenstift mit der Farbe schwarz
und zeichnest anschließend ein Rechteck, Ellipse und eine Linie mit der angegebenen Farbe
gruss

Meine Zeichnung ist bereits fertig -- ich sehe sie auf dem Monitor. Was tun mit gImage (IGPImage)?

Das Demo zeigt doch ein Vorgehen, wo man eine TGPGraphics Instanz (PrinterGraphic) erzeugt und zwischen Printer.BeginDoc und Printer.EndDoc fröhlich in die PrinterGraphic zeichnet. Soweit auch alles klar.
Aber meine Grafik ist doch schon fertig!
Die anvisierte Lösung von daywalker9 scheint mir in genau die richtige Richtung zu gehen -- allein ich weiß nicht, wie das praktisch gehen soll.

Danke & Gruß
Jazzman

daywalker9 11. Jul 2011 21:18

AW: GDI+: Image drucken
 
Bei TBitmap gibts ja das:

Delphi-Quellcode:
var
 BMP,
 MyBMP : TBitmap;
begin
  MyBMP:=TBitmap.create;
  MyBMP.LoadFromFile('C:\test.bmp');
  BMP:=TBitmap.create;
  BMP.Height:=100;
  BMP.Width:=100;
  BMP.Canvas.Draw(0,0,MyBMP);
Kann dir leider nicht sagen, wie es bei GDI Image ist.

EWeiss 11. Jul 2011 21:38

AW: GDI+: Image drucken
 
TGPGraphics.Create(Printer.Handle); ?
Nicht TGPGraphics.Create(Printer.Canvas.Handle); ?

PS:
Was ich noch gefunden habe..

Delphi-Quellcode:
graphics := TGPGraphics.Create(tmpbitmap.Canvas.Handle);
graphics.DrawImage(InGP, DestRect, srcx, srcy, srcwidth, srcheight,
UnitPixel);
printer.canvas.copyrect(destrect, tmpbitmap.canvas, destrect);
gruss

Jazzman_Marburg 12. Jul 2011 17:09

AW: GDI+: Image drucken
 
Manchmal ist die Lösung beschämend trivial: :?
Delphi-Quellcode:
  Printer.BeginDoc;
    PrinterGraphics := TGPGraphics.Create(Printer.Handle);
    myPoint.X := 0;
    myPoint.Y := 0;
    PrinterGraphics.DrawImage(gImage, myPoint);
  Printer.EndDoc;
Gruß
Jazzman

EWeiss 12. Jul 2011 17:30

AW: GDI+: Image drucken
 
Zitat:

Zitat von Jazzman_Marburg (Beitrag 1111377)
Manchmal ist die Lösung beschämend trivial: :?
Delphi-Quellcode:
  Printer.BeginDoc;
    PrinterGraphics := TGPGraphics.Create(Printer.Handle);
    myPoint.X := 0;
    myPoint.Y := 0;
    PrinterGraphics.DrawImage(gImage, myPoint);
  Printer.EndDoc;
Gruß
Jazzman

Dann hat mein post ja doch was gebracht..
Ist aber auch manchmal ein kreuz mit GDI+

gruss

Jazzman_Marburg 12. Jul 2011 19:48

AW: GDI+: Image drucken
 
Zitat:

Zitat von EWeiss (Beitrag 1111381)
Ist aber auch manchmal ein kreuz mit GDI+
gruss

Ja, aber ist schon auch 'ne Wucht! Mit einfachem GDI hätte ich mein Projekt nicht hinbekommen. Ich weiß halt nicht wo ich eine Delphi-kompatible Dokumentation zu GDI+ finde. Ich nutze die Library von Erik van Bilsen -- großartig, nur eine umfangreichere Doku wäre halt super.

Vielen Dank & Gruß
Jazzman


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 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