AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Bild mit JEDI ZLib komprimieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bild mit JEDI ZLib komprimieren

Ein Thema von ByTheTime · begonnen am 16. Nov 2012 · letzter Beitrag vom 18. Nov 2012
Antwort Antwort
Seite 2 von 2     12   
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#11

AW: Bild mit JEDI ZLib komprimieren

  Alt 17. Nov 2012, 23:09
@himitsu: Ja, davon habe ich schonmal gehört. Die Frage ist, wie lange es dauert das auszuführen. Ich bastel gerade mit Jpg's. Also wenn ich Quality 30 setzte, das hämmer ich ein 1,1MB BMP runter auf ein 14KB JPG! Finde ich ziemlich gut, den ich sehe keinen großen Unterschied. Und bei meiner langsamen Leitung (6000 Down, 600 UP!; Durch Ausbau im Dorf bald 50.000 ), wäre das dann optimal

Aber es hängt an einer Stelle. Habe es bis zum Empfangen umgesetzt, bekomme aber den JPEG Fehler #42:
Delphi-Quellcode:
procedure TfrmCam.CamServerExecute(AContext: TIdContext);
var
  FStream: TMemoryStream;
  ReceivePic: TJPEGImage;
begin
  FStream := TMemoryStream.Create;
  ReceivePic := TJPEGImage.Create;

  try
    AContext.Connection.Socket.ReadStream(FStream);
  finally
    try
      FStream.Position := 0;
      ReceivePic.LoadFromStream(FStream);
      RVideo.Picture.Assign(ReceivePic);
    finally
      FStream.Free;
      ReceivePic.Free;
    end;
  end;
end;
Okay, meinen ersten Fehler habe ich gelöst, gab ein Problem bei der größe des VideoFensters auf der ClientSeite (oben ist der Server). Doch nun gibt es beim stoppen einen fehler, ich schau nochmal und poste dann mal meinen Arbeitstand.
Lukas

Geändert von ByTheTime (18. Nov 2012 um 00:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#12

AW: Bild mit JEDI ZLib komprimieren

  Alt 18. Nov 2012, 00:49
Zacherl hatte zu einem verwandten Thema eine Thread
http://www.delphipraxis.net/171035-s...-netzwerk.html
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#13

AW: Bild mit JEDI ZLib komprimieren

  Alt 18. Nov 2012, 01:11
Habe es bis zum Empfangen umgesetzt, bekomme aber den JPEG Fehler #42:
Du darfst nicht einfach "blind" aus dem TCP/IP-Stream lesen, sondern für jedes Bild muss die Grösse beim Empfänger bekannt sein.
Wenn z.B. ein bestimmtes Jpeg-Bild 16548 Bytes hat, dann müssen auch genau die Anzahl von Bytes in den temporären Memorystream geschrieben werden, bevor man ein JPegImage rekonstruiert.
Der Sender muss dazu zuerst die Anzahl der Bytes (L) gefolgt von den Nutzdaten (n) abschicken.
Auf der "Leitung" sieht das so aus.
Code:
LLLLnnnnnnnnnnnnnnnnnnnnnnnn...nLLLLnnnnnnnnnnnnnnnnnnnn...n
Der Empfänger muss also immer 4 Bytes Längenangabe lesen und dann so lange Bytes lesen und sammeln bis die Länge erreicht wird.

Die Senderseite ist sehr leicht zu programmieren; die Empfangsseite ist schon deutlich kniffliger.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#14

AW: Bild mit JEDI ZLib komprimieren

  Alt 18. Nov 2012, 03:38
Ob es sich beim JPeg lohnt noch einen Binärdiff anzufertigen
Ich glaub bei Assarbad(Olly) hatte ich mal auf der Webseite ein Diff-Programm/Code gesehn, welcher von Binärdateien ein Differenzabbild erzeugt.
- Das war eine Datei, wo "nur" drinsteht, was man alles in einer Ursprungsdatei ändern muß, damit eine Zieldatei entsteht.
Ich glaub das ging auch recht flott, aber ob das hier, beim JPeg, was "Positives" (Datenreduzierung) bewirkt, weiß ich nicht.

Ein Differenzbild von einem BitMap ist sehr flott erstellt, aber nach der JPeg-Komprimierung und Dekomprimierung dürften sich solche "Fehler" enschleichen, bei der starken Komprimierung, daß man das nun verfälschte Differenzbitmap vermutlich nicht mehr so gut verrechnen kann.


Und bei meiner langsamen Leitung (6000 Down, 600 UP!; Durch Ausbau im Dorf bald 50.000 ), wäre das dann optimal Merkel hat versprochen, daß in 2 Jahren (also bis Ende 2011) alle Bürger mindestens 10 MBit daheim haben werden ... egal wo sie wohnen.
An deiner Stelle würde ich die Alte mal darauf ansprechen.

Aber sei froh, daß du kein LTE von der Telekom hast ... 100 MBit/s für nur 10€ im Monat und nach 48sec hat man das Traffic-Limit erreicht
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (18. Nov 2012 um 03:50 Uhr)
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#15

AW: Bild mit JEDI ZLib komprimieren

  Alt 18. Nov 2012, 09:46
@Bummi: Ja ganz am Ende, steht eine fertige Codec Unit, schau ich mir auf jeden Fall an
@sx2008: Ich befasse mich erstmal mit der Unit, in Zacherl's Thread. Aber danke für den Hinweiß
@himitsu: Also ich schau mir erstmla die Unit von oben an. Aber ich bin mit meines ersten Ergebniss erstmal zufrieden, den 14Kb sind ja fast nichts Ich denke, vllt. würde die berechnung des Differenzbildes sogar etwas mehr Zeit in anspruch nehmen, als das senden Und über die Rechenleistung habe ich mir auch keine Gedanken gemacht. Aber es wäre schön, < 20000K zu bleiben. Zum Internet: Ja, schön wärs Wir haben zwar ne LTE Antenne direkt neben dem Haus, aber ich warte jetzt lieber noch 4-5 Wochen, bis ich die 50.000er nutzen kann. Zum Glück steht mein Kaff besser dar als die Nachbardörfer Die freuen sich über 6000 bei ihrer 1000er Leitung da
Lukas
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#16

AW: Bild mit JEDI ZLib komprimieren

  Alt 18. Nov 2012, 10:00
Eine Frage hab ich aber nochmal, ich habe mir mal die Unit in dem Thread von Zacherl angeschaut:

Delphi-Quellcode:
procedure WriteDiffPkg(last, next: TBitmap; zipPkg: TMemoryStream; var startLine: Byte; lineStep: Byte);
procedure ReadDiffPkg(last: TBitmap; zipPkg: TStream);
Ich verstehe leider die beiden prozeduren nicht ganz.
1. Prozedure:
  • last = ?
  • next = ?
  • // Kommt da eine Bitmap rein, oder wird sie dann da ausgegeben?!
  • zipPkg = Der verpackte Stream
  • startLine = Die Zeile, in der er anfangen soll sie umzuwandeln?
  • lineStep = Schickt jede "n"-te Zeile

2. Prozedure:
  • last = Das ankommende, entpackte Bild
  • zipPkg = Der ankommende Stream // Muss das nicht auhc TMemoryStream sein, ich dachte TStream, gibt es garnicht mehr

So habe ich das jetzt verstanden. Schade, dass das angehängte Beispielprogramm nicht Quellenoffen ist, dann würde sich mir vllt. mehr erschließen :/
Lukas

Geändert von ByTheTime (18. Nov 2012 um 13:03 Uhr)
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#17

AW: Bild mit JEDI ZLib komprimieren

  Alt 18. Nov 2012, 18:50
@sx2008: Eine Sache ist mir aber noch ausgefallen: Der JPEG-Fehler #42 kommt nicht bei dem lesen aus dem Stream, sondern wenn ich dem TImage wo das Bild reinkommt das Bild eines anderen TImage zuweiße (damit dan wieder ein WebCam-Logo zu sehen ist ). Allerdings ist das ein PNG. Mal schauen.
Lukas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:24 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