Autor |
Beitrag |
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Di 14.12.10 20:12
Hi,
ich mache Screenshots von Bildausschnitten und vergleiche diese mit schon vorher aufgenommenen Bildern in Ressourcendateien.
Soweit so gut.
Doch jetzt will ich es unabhängig von der Auflösung machen, denn ein Screenshot bei mir (1920*1080) fällt anders aus als bei anderen (z.B 1920*1200). Kann ich das irgendwie komplett Auflösungsunabhängig gestalten, oder muss ich für jede Bildschirmauflösung einzeln alles einstellen?
Hier mal die Funktion:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure Screenshot(Bounds:TRect; Links, Rechts, Oben, Unten : Integer); inline; var DeskCanvas: TCanvas; ShotTargetBitmap : TBitmap; Cut : TRect; begin try TBmp:=TBitmap.Create; bounds.left:=bounds.Left+verschiebenx; bounds.right:=bounds.right+verschiebenx; bounds.top:=bounds.top+verschiebeny; bounds.bottom:=bounds.bottom+verschiebeny; try DeskCanvas := TCanvas.Create; DeskCanvas.Handle := GetDC(0); Shottargetbitmap:=TBitmap.create; ShotTargetbitmap.Width := Round((Bounds.Right - Bounds.left) * 1); ShotTargetbitmap.Height := Round((Bounds.Right - Bounds.Left) * 1); BitBlt(ShotTargetBitmap.Canvas.Handle, 0 ,0, bounds.Right-bounds.left, bounds.Bottom-bounds.top, DeskCanvas.handle, bounds.Left, bounds.Top, SRCCOPY); Cut.Left := Links; Cut.Top := Oben; Cut.Right := Rechts; Cut.Bottom := Unten; TBmp.Width := Cut.Right - Cut.Left; TBmp.Height := Cut.Bottom - Cut.Top; BitBlt(TBmp.Canvas.Handle, 0, 0, Cut.Right, Cut.Bottom, ShotTargetBitmap.Canvas.Handle, Cut.Left, Cut.Top, SRCCOPY); finally ReleaseDC(0,DeskCanvas.Handle); FreeAndNil(deskcanvas); FreeAndNil(ShotTargetBitmap); end; except FreeAndNil(TBmp); end; end; |
Lg
Henry Moderiert von Martok: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 14.12.2010 um 19:14
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.12.10 20:24
Ich verstehe gerade nicht was du da einzeln einstellen musst? 
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Di 14.12.10 20:39
Also wenn ich 2 mal die gleiche Funktion mit den gleichen Parametern starte (also screenshotte und danach schneide), ist zb bei 1920*1080 das Bild kleiner in der Breite, als bei 1920*1200.
Jetzt könnte ich das zwar irgendwie hinbekommen, dass ich das gleiche Bild auch auf ner anderen Auflösung bekomme, ist aber ziemlich umständlich.
Deswegen denke ich ich müsste den Benutzer auffordern seine Auflösung anzugeben bzw ich müsste die auslesen.
Dann müsste ich für jede Auflösung die Parameter :(Bounds:TRect; Links, Rechts, Oben, Unten : Integer) nochmal strecken.
Hoffe das ist soweit verständlich.
Wie gesagt ist das recht umständlich, deswegen wollte ich wissen ob ihr vielleicht einen Weg kennt, mit welchem ich nicht auf die Auflösung achten müsste.
Lg
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.12.10 20:42
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Di 14.12.10 20:56
Ok, das heißt man kann solche Programme nicht richtig auf anderen Computern laufen lassen, ohne dass ich alle Bilder auf dem anderen Computer neu aufnehmen muss?
Wäre es denn nicht theorethisch möglich, dass ich das aufzunehmende Fenster strecke?
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.12.10 21:37
Ich verstehe nicht wie du dir das vorstellst. Das geht doch rein logisch nicht.
Beispiel:
Ich nehme einen Editor auf 1024x768 Pixeln. Dann passen z.B. 40 Zeilen drauf. Ein anderer Benutzer hat jetzt 1024x600 Pixel. Da passen nur 30 Zeilen drauf. Wenn du jetzt die 40 Zeilen auf 30 verzerrst, wie willst du das dann vergleichen?
Im Anhang einmal entsprechende Screenshots.
Du kannst eben nur Bildschirmbereiche vergleichen, die dann bei allen Benutzern so sind.
Einloggen, um Attachments anzusehen!
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Di 14.12.10 22:13
Ja war nen Logikfehler, das kann so net gehn, danke.
Wie wär es denn wenn ich die Auflösung erzwinge?
Ist ja nur für den Privatgebrauch gedacht, aber ich kriege manche Bildschirme halt nur auf 1920*1200 und nicht auch 1920*1080, denke liegt am Widescreen Format.
Also wenn ich 120 Pixel auf der X Achse "abschneiden" kann, wär das cool
Lg
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 15.12.10 06:29
HenryHux hat folgendes geschrieben : | Wie wär es denn wenn ich die Auflösung erzwinge? |
Wie stellst du dir das vor? Auf einem Ultra-Widescreen z.B. wird eine 4:3 Auflösung nicht sinnvoll funktionieren (weil total verzerrt).
HenryHux hat folgendes geschrieben : | aber ich kriege manche Bildschirme halt nur auf 1920*1200 und nicht auch 1920*1080, denke liegt am Widescreen Format.
Also wenn ich 120 Pixel auf der X Achse "abschneiden" kann, wär das cool  |
Naja, du kannst ja beim Erstellen des Screenshots entsprechend angeben was du haben willst.
Aber geht es nicht eigentlich eher um Fensterinhalte?
Oder fangen wir mal anders an: Was willst du mit den Vergleichen denn eigentlich erreichen? Denn ich meine der komplette Bildschirm sieht doch eh bei jedem anders aus. Und auch die einzelnen Fenster aufgrund des Rahmens, etc.
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Mi 15.12.10 09:22
Mal wieder überzeugend
War wieder ne falsche Planung, ich versuche mal das irgendwie anders zu regeln, so gehts nicht.
Ich meld mich nochmal mit nem neuen Konzept =)
Lg
|
|
|