Autor Beitrag
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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:
ausblenden volle Höhe Delphi-Quelltext
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, 00, 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 user profile iconMartok: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 14.12.2010 um 19:14
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 14.12.10 20:24 
Ich verstehe gerade nicht was du da einzeln einstellen musst? :gruebel:
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 14.12.10 20:42 
user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Deswegen denke ich ich müsste den Benutzer auffordern seine Auflösung anzugeben bzw ich müsste die auslesen.
Naja, auslesen geht direkt über Screen. Da bekommst du eine Liste der Monitore.

user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Dann müsste ich für jede Auflösung die Parameter :(Bounds:TRect; Links, Rechts, Oben, Unten : Integer) nochmal strecken.
Wenn du das Bild auf eine andere Bildschirmauflösung mit einem anderen Seitenverhältnis verzerrst, kannst du den Vergleich doch vergessen. Schließlich ist nicht genauso viel drauf, wenn du z.B. weniger vertikale Pixel hast. :nixweiss:
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 14.12.10 21:37 
Ich verstehe nicht wie du dir das vorstellst. Das geht doch rein logisch nicht. :gruebel:

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? :nut:

Im Anhang einmal entsprechende Screenshots.

Du kannst eben nur Bildschirmbereiche vergleichen, die dann bei allen Benutzern so sind.
Einloggen, um Attachments anzusehen!
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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 :D

Lg
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 15.12.10 06:29 
user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
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). ;-)

user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
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 :D
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mi 15.12.10 09:22 
Mal wieder überzeugend :D
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