![]() |
Remote Screenshots, aber nur die geänderten Teile
Hi,
wie kann ich ein Remote Screenshot Programm realisieren, was aber nur jeweils die Änderungen neu überträgt? Geht das mit dem PNG Format? Weil ich habe da mal was gelesen, dass das möglich wäre. Florian |
Re: Remote Screenshots, aber nur die geänderten Teile
Screenshot machen -> übertragen -> Neuen screenshot -> Differenzbild -> alles was gleichgeblieben ist, ist jetzt schwarz -> mit PNG komprimieren: große gleichfarbige flächen werden sehr klein -> übertragen -> wieder zusammenrechnen.
|
Re: Remote Screenshots, aber nur die geänderten Teile
Cool, danke ... hast du evtl einen Beispielcode fürs Erstellen von Differenzbildern und das Zusammenrechnen?
|
Re: Remote Screenshots, aber nur die geänderten Teile
Für's Differenzbild einfach nur die Pixel paarweise subtrahieren (RGBA getrennt behandeln). Das Ergebnis dann in ein neues Bild schreiben. Bild muss hier nicht unbedingt ein Bild in diesem Sinne sein, sondern einfach ein array von byte triplets (oder quadrupels) wenn du mit alpha-Kanal arbeitest, da du durch die Subtraktion auch negative Werte erhalten kannst, die ja in einem Bild eher nicht vorkommen.
-Jan- |
Re: Remote Screenshots, aber nur die geänderten Teile
Ja äh...
ich hätts - in meiner grandiosen booleschen unbedarftheit - halt so gemacht:
Delphi-Quellcode:
du kannst dann aus der Alphamaske und den Farbwerten ein PNG-Bild machen.
var
Old, New, Result: TBitmap; Alpha: Array of Boolean; PtrOld, PrtNew: Pointer; x,y: Integer; begin for y := 0 to Old.Height-1 do begin ptrOld := Old.Scanline[y]; ptrNew := New.Scanline[y]; for x := 0 to Old.Width-1 do begin if TColor(PtrOld^) = TColor(PtrNew^) then begin Alpha[x,y] := 0; Result.Pixels[x,y] := clBlack; //war zu faul da noch mal rumscanzulinen.... sollte man aber! Bringt einiges an Performance! end else begin Alpha[x,y] := 1; Result.Pixels[x,y] := TColor(PtrNew^); end; Inc(PtrOld); Inc(PtrNew); end; end; end; |
Re: Remote Screenshots, aber nur die geänderten Teile
Vielen Dank ... aber man könnte es theoretisch auch so machen, oder?
Delphi-Quellcode:
Florian
Image2.picture.bitmap.Canvas.CopyMode := SRCINVERT;
with Image2.picture.bitmap.canvas do CopyRect(ClipRect,Image1.picture.bitmap.Canvas,Image1.picture.bitmap.Canvas.ClipRect); |
Re: Remote Screenshots, aber nur die geänderten Teile
Vom Prinzip her ähnlich, ABER: so wie ich das mitbekommen habe geht es um Remote-Übertragung des Bildschirminhaltes. Das bedeutet, dass Komprimierung hier eine Rolle spielen wird.
Komprimierung ist dann besonders effizient, wenn es viel Redundanz im den zu komprimierenden Informationne gibt. Wenn ich jetzt also einfach mal annehme, dass mein Bild heller geworden ist, aber sonst nicht viel passiert ist, dann bedeutet das, dass ich in der Differenz der beiden Bilder einen konstanten Wert erhalten werde. Dieser Wert lässt sich dann sehr effizient komprimieren. Wenn ich allerdings in mein Differenzbild einfach jeden veränderten Pixel reinschreibe, dann kann ich da große Wertespannen haben, die bei der Komprimierung stark ins Gewicht fallen. Daher würde ich mal sagen, dass das Ganze mit dem einfachen Trick der Subtraktion effizienzsteigernd bei der Datenmenge wirkt. Gruß Jan |
Re: Remote Screenshots, aber nur die geänderten Teile
Ich würde es einfach mit einem xor für alle Pixel lösen, da sich zum einen selten der gesamte Bildschirm ändert und zum anderen das relativ schnell ist (im vergleich zu Luke's Lösung mit den richigen Farbwerten)
Man kann dann einfach (geht vll. sogar mit bitblt) das "xor-bild" machen - alle gleeichgebliebenen Regionen werden schwarz - und das dann entsprechend komprimieren. |
Re: Remote Screenshots, aber nur die geänderten Teile
Okey, dann danke euch allen.
|
Re: Remote Screenshots, aber nur die geänderten Teile
Du koenntest auch den gesamten Bildschirm in ein Raster stecken. Vlt. 8x8 oder 16x16 oder 32x32 z. B. Dann hast du ja nur noch gewisse "Felder" die du abgleichen und verschicken musst!
Vlt. hilft das auch! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 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