AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Bitmap mit höherer Auflösung?

Ein Thema von Moombas · begonnen am 30. Jan 2019 · letzter Beitrag vom 31. Jan 2019
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#1

Bitmap mit höherer Auflösung?

  Alt 30. Jan 2019, 11:58
Delphi-Version: 10.2 Tokyo
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?
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Bitmap mit höherer Auflösung?

  Alt 30. Jan 2019, 13:33
Warum nutzt du nicht function TCustomForm.GetFormImage: TBitmap?
Ist es damit schon besser?
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Bitmap mit höherer Auflösung?

  Alt 30. Jan 2019, 13:45
Hmm danke für diesen Tipp, der ist vom Code her wesentlich kürzer als was ich vorher hatte XD

  PDF.VCLCanvas.Draw(120, 75, GetFormImage);
Aber es sieht trotzdem noch verwaschen aus.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (30. Jan 2019 um 13:49 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Bitmap mit höherer Auflösung?

  Alt 30. Jan 2019, 13:54
So hast du übrigens eine Speicherleck.
Wenn die Canvaszeichenfläche zu klein ist, wird das Bitmap ggf. verkleinert und deswegen das verwaschende?
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Bitmap mit höherer Auflösung?

  Alt 30. Jan 2019, 14:01
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.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (30. Jan 2019 um 14:46 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Bitmap mit höherer Auflösung?

  Alt 30. Jan 2019, 14:49
TCanvas.StretchDraw?
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Bitmap mit höherer Auflösung?

  Alt 30. Jan 2019, 14:51
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.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (30. Jan 2019 um 14:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#8

AW: Bitmap mit höherer Auflösung?

  Alt 30. Jan 2019, 15:03
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 PDF.VCLCanvas ein TCanvas ist, sollte auch ein MyForm.PaintTo(PDF.VCLCanvas, 120, 75) funktionieren.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Bitmap mit höherer Auflösung?

  Alt 31. Jan 2019, 08:22
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.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (31. Jan 2019 um 09:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#10

AW: Bitmap mit höherer Auflösung?

  Alt 31. Jan 2019, 09:51
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:51 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