Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Printer.Canvas auf Bitmap.Canvas kopieren
Sven - Fr 25.10.02 08:10
Titel: Printer.Canvas auf Bitmap.Canvas kopieren
Wer kann mir sagen wie ich das Printer.Canvas auf ein Bitmap.Canvas kopieren kann? Mit Assign geht das nicht!
Sven
mk2 - Fr 25.10.02 08:40
hi,
probiers mal mit der copyrect-methode vom PrinterCanvas.
mfg mk2
Sven - Fr 25.10.02 11:37
Nein, geht nicht.
Hier mal der Quelltextauszug. Vielleicht hab ich da irgendwo etwas vergessen.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| BMP := TBitmap.Create; BMP.Width := Printer.PageWidth; BMP.Height := Printer.PageHeight; R.TopLeft := Point(0, 0); R.BottomRight := Point(BMP.Width, BMP.Height); BMP.Canvas.CopyRect(R, Printer.Canvas, R); BMP.SaveToFile('Bitmap'+inttostr(currPage)+'.bmp'); BMP.Free; |
Sven
JeanvanHees - Fr 25.10.02 11:50
Als LETZTES retmittel hab ich das hier für dich.
Das hier ist aber umgekehrt, also von Canvas auf printer.canvas.
Quelltext
1: 2: 3: 4: 5:
| StretchBlt(Printer.Canvas.Handle,0,500, Trunc(Mainform.Image2.Width*29.5), Trunc(Mainform.Image2.Height*29.5), Mainform.Image2.Canvas.Handle,0,0,Mainform.Image2.Width*10, Mainform.Image2.Height*10,SRCCOPY) |
:shock: ,ja du siehst es gut
So hab ich printen müssen in Delphi! Eine Schande! :autsch:
Was extrem wichtig ist, ist das du die werter image.width..etc.
mit einen wert(<>1) multipliziert.
Sonst kriegst du ein lehres schirm.
Ich denke du mußt das bild kleiner machen(Ich mache es gerade größer), also multiplizieren mit reals (0.2,0.4...ausprobieren), und dan das was du da rauskriegst Truncen (Trunc(int/real)).
Gebrauch diese #$&*-function nur wenns nicht anders kann. :wave:
Sven - Fr 25.10.02 12:42
:welcome: Danke ich werds ausprobieren. Spätestens am Montag kann ich Euch sagen ob es funzte oder nicht. :rofl:
JeanvanHees - Fr 25.10.02 12:44
Hey, deine signatur...
Die hat jemand anders hier auch, aber nur in english...
oder stimmt hier etwas nicht :?!?:
Sven - Fr 25.10.02 16:01
Das war ich. :mrgreen: Ich habe es mal wieder auf deutsch umgestellt. :wink2:
Sven - Mo 28.10.02 13:01
JeanvanHees hat folgendes geschrieben: |
Quelltext 1: 2: 3: 4: 5:
| StretchBlt(Printer.Canvas.Handle,0,500, Trunc(Mainform.Image2.Width*29.5), Trunc(Mainform.Image2.Height*29.5), Mainform.Image2.Canvas.Handle,0,0,Mainform.Image2.Width*10, Mainform.Image2.Height*10,SRCCOPY) | |
Tut mir leid so geht es nicht. Ich möchte kein Image auf einen Printer drucken, sondern genau umgekehrt. Ich möchte den Inhalt des Drucker-Canvas auf ein Bitmap kopieren.
Sven
Delete - Mo 28.10.02 13:26
Dann vertausch die Parameter. Aber was macht das für einen Sinn? Bevor es auf dem Printer-Canvas landet muß es ja irgendwo hierkommen. Warum holst du es dir nicht auch von der Quelle für das Printer-Canvas? Das Printer-Canvas ist ja wohl eigentlich die Endstation. :roll:
JeanvanHees - Mo 28.10.02 13:38
@ Luckie
Amen!
Sven - Di 29.10.02 13:27
Ich möchte ein Preview für ein (Rx)RichEdit erstellen. Das soll genauso aussehen wie der spätere Ausdruck. Ich habe zwar eine Previewfunktion, aber die hat eine Fehlerhafte Darstellung. Ähnlich der des WordPad.
Was liegt also näher auf ein Printer.Canvas zu drucken und das ganze anschließend in ein Bitmap zu transportieren und dann zur Anzeige zu bringen.
@Luckie
:( Parameter tauschen? Rate mal was ich wohl gemacht habe? Und es geht trotzdem nicht.
@Luckie und JeanvanHees
:twisted: Wenn ich es nicht bräuchte, hätte ich wohl kaum diesen Thread gestartet. Bevor Ihr also das nächste mal andere Leute mit irgendwelchen Kommentaren abschmettert, fragt lieber vorher wieso, weshalb und warum jemand diese Frage stellt.
Also, wie kann ich ein Printer.Canvas auf ein Bitmap.Canvas kopieren?
Delete - Di 29.10.02 13:36
@Sven:
Zitat: |
Bevor Ihr also das nächste mal andere Leute mit irgendwelchen Kommentaren abschmettert,
|
Wo habe ich etwas abgeschmettert?
Zitat: |
fragt lieber vorher wieso, weshalb und warum jemand diese Frage stellt
|
Und genau das habe ich gemacht, als ich dich nach dem Sinn gefragt habe.
Ändert aber nichts an meinen theoretischen Überlegungen. Die Quelle ist das RichEdit, das Ziel ist einmal das Printer.Canvas und einmal das Vorschau-Canvas. Auf die gleiche Art und Weise wie du es auf das Printer.Canvas bekommst, müßtest du es auch auf ein beliebiges anders Canvas bekommen und zwar mit dem RichEdit als Quelle, hat ja schließlich auch beim Printer.Canvas geklappt.
JeanvanHees - Di 29.10.02 13:39
Hey, war doch nicht böse gemeint :angel:
Stay cool 8)
Ich habe jedoch keine lösung;
Es ist nicht einfach in Delphi so mit den printer.canvas rum zu spielen, darum haben wir uns gefragt warum du das den so machen muß.
:)
Sven - Di 29.10.02 16:57
Nein, ich möchte es von dem Printer.Canvas habe. Ich will es EXAKT so wie auf dem Drucker haben.
Ich habe mir die Printer.pas von Delphi angesehen. Printer.Canvas ist ein direkter Nachfahre von TCanvas.
@JeanvanHees
Ich habe das Problem auch schon gehabt, als ich von einem selbst erzeugtem TCanvas etwas auf ein TBitmap kopieren wollte.
JeanvanHees - Di 29.10.02 17:14
Haßt du dran gedacht das das image auf den printer.canvas supergroß ist?
Di function die ich dich gegeben habe hat noch andere versionen.
Hier ist eine link mit mehr informationen über die function
http://www.allapi.net/apilist/StretchBlt.shtml
Sven - Mi 30.10.02 10:03
Das die Ergebnis-Bitmaps unter umständen riesig wird weiß ich 31 MB sind nicht von schlechten Eltern. Erzeugt werden diese auch, nur ohne Inhalt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!