![]() |
Delphi-Version: 10.2 Tokyo
Bitmap mit höherer Auflösung?
Hallo zusammen,
ich habe aktuell ein kleines "Schönheitsproblem"und wollte mal wissen ob ihr da eine Lösung kennt. Ich nutze SynPDF.pas um eine PDF zu erzeugen. Währenddessen wird ein Screenshot von der Form erzeugt und im PDF als Bild abgelegt:
Delphi-Quellcode:
Das Problem dabei: Die Auflösung des Bildes ist relativ unschön, kann man dies irgendwie positiv beeinflussen?
try
//.. Code ohne Kontext zum Problem Application.ProcessMessages; Win := GetForegroundWindow; if FullWindow then begin GetWindowRect(Win, WinRect); DC := GetWindowDC(Win); end else begin GetClientRect; DC := GetDC(Win); end; try Width := WinRect.Right - WinRect.Left - 14; Height := WinRect.Bottom - WinRect.Top - 8; Bmp := TBitmap.Create; try Bmp.Height := Height; Bmp.Width := Width; BitBlt(Bmp.Canvas.Handle, -8, -90, Width, Height, DC, 0, 0, SRCCOPY); PDF.VCLCanvas.Draw(120,75,bmp); finally Bmp.Free; end; finally ReleaseDC(Win, DC); end; finally //.. Code ohne Kontext zum Problem end; |
AW: Bitmap mit höherer Auflösung?
Warum nutzt du nicht function TCustomForm.GetFormImage: TBitmap?
Ist es damit schon besser? |
AW: Bitmap mit höherer Auflösung?
Hmm danke für diesen Tipp, der ist vom Code her wesentlich kürzer als was ich vorher hatte XD
Delphi-Quellcode:
PDF.VCLCanvas.Draw(120, 75, GetFormImage);
Aber es sieht trotzdem noch verwaschen aus. |
AW: Bitmap mit höherer Auflösung?
So hast du übrigens eine Speicherleck.
Wenn die Canvaszeichenfläche zu klein ist, wird das Bitmap ggf. verkleinert und deswegen das verwaschende? |
AW: Bitmap mit höherer Auflösung?
Du meinst weil ich es nicht wieder frei gebe?
War auch nur zum testen aber dennoch wesentlich weniger Code aber hast recht, richtig wäre natürlich:
Delphi-Quellcode:
Ich glaube eher umgekehrt (vergrößert), deswegen würde ich gerne die Auflösung des Bildes anpassen, wenn möglich. Und was ich als "Code dafür gefunden habe (
var
Image : TBitmap; //... try Image := GetFormImage; PDF.VCLCanvas.Draw(120, 75, Image); finally Image.free; end; ![]() |
AW: Bitmap mit höherer Auflösung?
TCanvas.StretchDraw?
|
AW: Bitmap mit höherer Auflösung?
Mein Verständnis wäre nun, das er hierbei das gleiche macht und dadurch das Bild verzerrt werden kann bzw. auch unscharf wird oder sehe ich das falsch?
Bzw. ich denke das SynPDF es "Streckt", daher würde ich es halt gerne VORHER hochskalieren. |
AW: Bitmap mit höherer Auflösung?
Zitat:
Übrigens: Wenn
Delphi-Quellcode:
ein
PDF.VCLCanvas
Delphi-Quellcode:
ist, sollte auch ein
TCanvas
Delphi-Quellcode:
funktionieren.
MyForm.PaintTo(PDF.VCLCanvas, 120, 75)
|
AW: Bitmap mit höherer Auflösung?
Hmm wir kommen damit der Sache näher ;)
Problem dabei: Die Form wird entsprechend "vergrößert", halt skaliert. Leider wird dadurch auch das Bild entsprechend größer und müsste wieder verkleinert werden. Zusätzlich müsste dann auch der default wert für PPI vorher ausgelesen werden, damit man wieder zurück switched. Aber durch das vergößern der Form finde ich dies aktuell eine unschöne Lösung, wenn auch das Bild danach nicht mehr verschwommen war, jedoch halt auf Grund der Vergrößerung unbrauchbar. Schade. Habe das eben mit hochskalieren und wieder verkleinern getestet, anstatt verwaschen, ist es nun Verpixelt, also keine Lösung. Habe auch mal die default PPI des Forms höher geschraubt, jedoch brachte dies auch keine Änderung. Gibt es jemand der das hier: ![]() Edit: Habs hin bekommen aber wenn man nun denkt das es besser geworden ist, Pustekuchen XD jetzt ist es RICHTIG verwaschen^^ War also auch nix. |
AW: Bitmap mit höherer Auflösung?
Dann liegt das vermutlich in SynPDF, das die 96 dpi des Bildschirms in eine höhere dpi des PDFs umwandelt, in dem es jedes Pixel in eine Quadrat von Pixeln umwandelt. Kann man die dpi in SynPDF irgendwie beeinflussen?
|
AW: Bitmap mit höherer Auflösung?
Das Problem ist schlicht, dass das PDF eine höhere Auflösung hat als Dein Bildschirm (ursprünglich war das ja mal als Druck-Vorstufe gedacht). Du kannst also entweder das Bild in Originalgröße (originale Pixelauflösung) verwenden, dann ist es im PDF sehr klein, oder Du kannst es hochskaliern, dann wird durch die Skalierung verwaschen.
Wenn ich mich recht erinnere, hat allerdings SynPDF ein Problem, das dazu führt, dass generell Grafiken sch****^d^d^d^dlecht aussehen. [... such ...] Das hier hatte ich damals einem Kollegen geschickt, der ein ähnliches Problem hatte: ![]() und hier: ![]() vielleicht hilft es ja. |
AW: Bitmap mit höherer Auflösung?
Muss ich mal schauen, danke für die Tipps. Sieht jedoch erstmal für mich nach vielen ??? aus XD
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 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