Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bitmap mit höherer Auflösung? (https://www.delphipraxis.net/199535-bitmap-mit-hoeherer-aufloesung.html)

Moombas 30. Jan 2019 10:58

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:
      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;
Das Problem dabei: Die Auflösung des Bildes ist relativ unschön, kann man dies irgendwie positiv beeinflussen?

TiGü 30. Jan 2019 12:33

AW: Bitmap mit höherer Auflösung?
 
Warum nutzt du nicht function TCustomForm.GetFormImage: TBitmap?
Ist es damit schon besser?

Moombas 30. Jan 2019 12:45

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.

TiGü 30. Jan 2019 12:54

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?

Moombas 30. Jan 2019 13:01

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:
var
Image : TBitmap;
//...
      try
        Image := GetFormImage;
        PDF.VCLCanvas.Draw(120, 75, Image);
      finally
        Image.free;
      end;
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 (https://www.delphi-treff.de/tipps-tr...afik-glaetten/) ist leider unvollständig (zu wenig Parameter, Variable nicht definiert) und mir leider aktuell noch zu hoch zum korrigieren.

TiGü 30. Jan 2019 13:49

AW: Bitmap mit höherer Auflösung?
 
TCanvas.StretchDraw?

Moombas 30. Jan 2019 13:51

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.

Uwe Raabe 30. Jan 2019 14:03

AW: Bitmap mit höherer Auflösung?
 
Zitat:

Zitat von Moombas (Beitrag 1424435)
deswegen würde ich gerne die Auflösung des Bildes anpassen

Das würde voraussetzen, daß dein Form auch für diese hohe Auflösung geeignet ist. Sollte das der Fall sein, und das setzt eine entsprechende Unterstützung der Delphi-Version voraus, dann könntest du dein Form mit ScaleForPPI in eine höhere Auflösung transformieren.

Übrigens: Wenn
Delphi-Quellcode:
PDF.VCLCanvas
ein
Delphi-Quellcode:
TCanvas
ist, sollte auch ein
Delphi-Quellcode:
MyForm.PaintTo(PDF.VCLCanvas, 120, 75)
funktionieren.

Moombas 31. Jan 2019 07:22

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: https://www.delphi-treff.de/tipps-tr...afik-glaetten/ besser versteht und mir sagen kann wie ich dies anwende, stelle mich da zu Blöd an ... :|

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.

Uwe Raabe 31. Jan 2019 08:51

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.
Seite 1 von 2  1 2   

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