AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Picture unterteilen in kleine Bereiche

Picture unterteilen in kleine Bereiche

Offene Frage von "bernhard_LA"
Ein Thema von nwnssolutionssoftware · begonnen am 15. Sep 2020 · letzter Beitrag vom 19. Sep 2020
Antwort Antwort
nwnssolutionssoftware

Registriert seit: 6. Aug 2018
45 Beiträge
 
#1

Picture unterteilen in kleine Bereiche

  Alt 15. Sep 2020, 20:55
Hallo liebe Community,
ich würde gerne ein JPEG was ich in ein TImage lade anschließend nochmal in 6 gleich große Blöcke unterteilen...
Also das JPEG einmal gesamt in ein Image laden und anschließend nochmal jeweils gleich große Stücke des JPEG´s in die 6 anderen Images laden.

PS. der Sinn dahinter ist, dass ich diese 6 Bereiche nachher auf Unterschiede zum vorherigen Bild prüfen will, da ich das jede Sekunde ausführe...
Und später dann nur die Entscheidenen Bereiche speichere.
Wird ein Screensharing-System... Und das ist der entscheidene Teil um performance reinzubringen.

Vielen Dank schonmal im Vorraus vllt habt ihr nh Idee wie man sowas umsetzen kann
Holger
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
2.443 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Picture unterteilen in kleine Bereiche

  Alt 16. Sep 2020, 08:40
Du möchtest, dass wir dir ein Beispiel-Projekt erstellen mit sieben TImage-Instanzen, reinladen des JPEGs, anzeigen des JPEGS im Haupt-TImage und dann bspw. per TCanvas.CopyRect sechs Bereiche aus dem JPEG auf die sechs weiteren TImage-Instanzen verteilen?
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
1.239 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Picture unterteilen in kleine Bereiche

  Alt 16. Sep 2020, 12:19
PS. der Sinn dahinter ist, dass ich diese 6 Bereiche nachher auf Unterschiede zum vorherigen Bild prüfen will, da ich das jede Sekunde ausführe...
Und später dann nur die Entscheidenen Bereiche speichere.
Wird ein Screensharing-System... Und das ist der entscheidene Teil um performance reinzubringen.
Die Grundidee ist schon nicht gut, das Komprimieren und Dekomprimieren der JPG kostet bei jeder Aktion (Kopieren, Vergleichen) Prozessorleistung und nicht zu knapp.

Mein Vorschlag:
- 1.Screenshot erstellen (und Orginalbild übertragen)
- 2.Screenshot erstellen
- Die Bilddaten beider Screenshot mit XOR verknüpfen (macht die Grafikkarte/-treiber z.B. per GDI, sehr schnell)
- Das Differenzbild verlustfrei komprimieren (z.B. RLE-Komprimierung). Da identische Bereiche im Differenzbild schwarz sind, benötigen diese praktisch keine Dateigröße. (und übertragen)
- am Ziel Orginalbild per XOR mit dem Differenzbild verknüpfen und Orginalbild durch neues Bild ersetzen(anzeigen)

Alternativ könnte man z.B. einen Videocodec verwenden.

Übriegens rdpwrap scheint mir eine bereits funktionierende besser Lösung zu sein:
https://github.com/stascorp/rdpwrap
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
918 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Picture unterteilen in kleine Bereiche

  Alt 16. Sep 2020, 12:59
d.h. eine 600 * 100 pixel bitmap möchest du in 6 bitmaps a 100 * 100 pixel aufteilen ?

welches Framework FMX oder VCL ?
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
134 Beiträge
 
#5

AW: Picture unterteilen in kleine Bereiche

  Alt 16. Sep 2020, 19:02
Hallo liebe Community,
PS. der Sinn dahinter ist, dass ich diese 6 Bereiche nachher auf Unterschiede zum vorherigen Bild prüfen will, da ich das jede Sekunde ausführe...
Und später dann nur die Entscheidenen Bereiche speichere.
Das ganze als JPG zu kodieren kostet Zeit und ist in diesem Fall ineffizient.

Wenn es sich um eine eher statische Szene handelt bei der nur einzelne Objekte bewegt werden, die Kameraposition (sofern vorhanden) fest ist bzw. sich nur wenige Pixel von Bild zu Bild verändern, dann hilft der folgende Ansatz:

Speichere das erste Bild bzw. ein Indexbild. Vergleiche das Bild und das darauf folgende Bild Punkt für Punkt miteinander - das kannst Du machen indem Du die Bildpunkte voneinander abziehst - dabei ergibt sich ein Wert von 0 für Bereiche in denen das Urbild und das darauf folgende Bild gleich sind. Unter den genannten Voraussetzungen ist das gesamte Bild 0 bis auf jene Bereiche in denen Bewegung stattfinden. Also meist viele 0

Dieses "Unterschiedsbild" kannst Du mittels Lauflängenkodierung komprimieren und speichern. Diese Art der Kodierung ist sehr effizient und schnell wenn es viele sich wiederholende Bereiche gibt. Dazu könntest Du Bildpunkte bzw. Reihen von Bildpunkten mit Hilfe von zwei Zahlen speichern. Die erste gibt an wie oft der nachfolgend Wert wiederholt wird:

Beispiel:

0000000011115745599000000000000 (30 Bytes) = 0800,0301,0105,0107,0104,0205,0209,1200 (12 Bytes)

Zur Dekodierung nimmst Du das letzte erhaltene Bild und addierst einfach die sich ergebende Unterschiedswerte. Dieses "neue" Bild ist dann gleichzeitig wieder der Ausgangspunkt für den nächsten Dekodiervorgang.

hth HaJoe
  Mit Zitat antworten Zitat
nwnssolutionssoftware

Registriert seit: 6. Aug 2018
45 Beiträge
 
#6

AW: Picture unterteilen in kleine Bereiche

  Alt 17. Sep 2020, 16:30
Wow danke für die vielen Hilfestellungen werde das jetzt mal schrittweise durcharbeiten.

Du möchtest, dass wir dir ein Beispiel-Projekt erstellen mit sieben TImage-Instanzen, reinladen des JPEGs, anzeigen des JPEGS im Haupt-TImage und dann bspw. per TCanvas.CopyRect sechs Bereiche aus dem JPEG auf die sechs weiteren TImage-Instanzen verteilen?
Nein natürlich sollt ihr nicht für mich die Arbeit machen sondern wenn einer weiß wie man sowas entweder besser oder genauso umsetzen kann evtl. Hilfestellungen geben weil ich das so in diesem Umfang noch nie gemacht habe.

Aufjedenfall schon mal danke für die vielen Vorschläge.
Holger
  Mit Zitat antworten Zitat
nwnssolutionssoftware

Registriert seit: 6. Aug 2018
45 Beiträge
 
#7

AW: Picture unterteilen in kleine Bereiche

  Alt 17. Sep 2020, 16:34
d.h. eine 600 * 100 pixel bitmap möchest du in 6 bitmaps a 100 * 100 pixel aufteilen ?

welches Framework FMX oder VCL ?
Mit VCL... aber ja das war zumindest ungefair mein Plan.

Ich möchte halt einen Screenshot in kleinere Teile aufteilen um dann zu gucken welche dieser Bereiche sich verändert hat und dann nur diesen Bereich weitergeben.
Wie gesagt soll ein Screensharing system werden, und ich weiß das ungefair diese Technik auch bei VNC verwendet wird das man halt nur den Bereich versendet der sich auch verändert hat.
Holger
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
918 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Picture unterteilen in kleine Bereiche

  Alt 19. Sep 2020, 22:28
mit der VCL wäre dann Bitblt (... ); die gesuchte Funktion .
Eine ähnliche Frage / incl. Lösung wäre dann hier : https://stackoverflow.com/questions/...itmap-in-place
  Mit Zitat antworten Zitat
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 08:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf