AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Komprimierung : Wie geht das?
Thema durchsuchen
Ansicht
Themen-Optionen

Komprimierung : Wie geht das?

Ein Thema von NickelM · begonnen am 13. Jul 2010 · letzter Beitrag vom 20. Jul 2010
Antwort Antwort
Seite 1 von 3  1 23      
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#1

Komprimierung : Wie geht das?

  Alt 13. Jul 2010, 15:12
Hallo ihr,

Ich arbeite in meinem Programm mit fertigen Komprimierungen.

Das ist alles schön und gut und funkt.

Nur ich frag mich solangsam, wie man sowas macht. Nur vom Aufbau her.
Wie macht man aus einer 5 MB großen datei eine 1 MB und wie kann man das dan wieder zurück machen?
Ich hab schon gegoogelt und finde irgendwie net das was ich suche.

Ich kann mich nicht vorstellen, wie man aus 1 MB datei wieder die ursprünglichen 5 MB machen kann?
Wie kann man den aus weniger mehr machen? bzw. wie weis man wo man was wieder dranhängen muss?

Ich weis ja schon wie ich Bytes schreiben kann und lesen kann, deshalb frag ich mich, wie man Bytes wegnehmen kann und wie man deise wegnenohmen Bytes wieder herstellen kann.

Hoffe jemand weis eine gute Seite (am besten deutsch kann auch englisch sein), wie man den Aufbau einer Komprimierung erklärt bekommt.
Vllt kanns mir auch jemand erklären.
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
ATSV

Registriert seit: 8. Aug 2008
95 Beiträge
 
Delphi 7 Professional
 
#2

AW: Komprimierung : Wie geht das?

  Alt 13. Jul 2010, 15:21
Hast du schonmal ins Wiki geschaut?
  Mit Zitat antworten Zitat
-Phantom-

Registriert seit: 26. Nov 2009
Ort: Bockhorst
319 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Komprimierung : Wie geht das?

  Alt 13. Jul 2010, 15:22
Willst du wissen wie man es genau macht? Oder willst du es einfach nur machen? Es gibt dafür ein paar Komponenten wie abbrevia
Mathias Jansen
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Komprimierung : Wie geht das?

  Alt 13. Jul 2010, 15:26
Moin,

da gibt es natürlich beliebig raffinierte (und dann meist auch komplizierte) Algorithmen, für den Einsteig und um sich das Prinzip klar zu machen, könnte die Lauflängen-Kodierung hilfreich sein:
http://de.wikipedia.org/wiki/Laufl%C3%A4ngenkodierung

Im Prinzip geht es darum, wiederkehrende Zeichenfolgen zusammen zu fassen:

Wenn Du AAAAACBBBBBB als Zeichenfolge hast, könntest Du auch {5A}C{6B} schreiben und müsstest Dir mit Steuerzeichen - hier die geschweiften Klammern - nur merken, was wohin gehört. (Das ist jetzt natürlich stark vereinfacht)
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Komprimierung : Wie geht das?

  Alt 13. Jul 2010, 15:33
Danke an allen.

Also ich glaube vom Prinzip her wie z.b. diese Zeichenketten vereinfachen hab ich jetzt kapiert.
Nur weis ich von dem TBytes Array schreiben wie ein Record z.b. ein Bytes aussieht.
Wenn ich mir das so anguge, frag ich mich wie man sowas z.b. Komprimeiren könnte.

Also die vorgehensweise, wie Bytes zupacken sozusagen.

@-Phantom- : Es geht mir um die vorgehensweise.
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Komprimierung : Wie geht das?

  Alt 13. Jul 2010, 15:42
Ist identisch.
Die o.g. Buchstaben sind auch "nur" Bytes. Das 'A' hat den numerischen Wert von 65. Im Speicher steht da auch nur der Zahlenwert, den wir mit an passender Stelle als den Buchstaben 'A' interpretieren. Dem Algorithmus ist das aber egal. Der sieht nur eine Folge von Bytes. Das (vereinfachte) Prinzip lautet "Suche Folgen von gleichen Werten und ersetze diese durch was Kürzeres".
Kritisch wird es, wenn in Deinem Array NUR unterschiedliche Zahlen vorkommen, dann wirst Du mit dem o.g. Verfahren keinen Blumentopf gewinnen können. Dann könnte man jedoch andere Verfahren starten, wie sie z.B. bei MP3 oder JPG zum Einsatz kommen: Verlustbehaftete Kompression. Das heisst, dass die Daten (leicht) verändert werden, um bessere Kompressionsraten erzielen zu können. So könnte man z.B. die Werte eines Arrays runden, um wieder Bereiche von identischen Werten zu haben. Sehr plastisch siehst Du das, wenn Du in einem Grafikprogramm die Kompressionsrate beim JPG-Export sehr hoch und die Glättung sehr niedrig stellst. Dann bilden sich Klötzchen, die sich aber wunderbar komprimieren lassen. (Auch wieder arg vereinfacht dargestellt.)
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Komprimierung : Wie geht das?

  Alt 13. Jul 2010, 15:45
Man könnte auch mal in der DP, Google oder bei Wiki nach Huffman, bzw, Entropiekodierung schauen.

Hierbei wird erstmal die Häufigkeit der vorkommenden Bytes gezählt und dann werden die vorhandenen Bytes mit einer dynamischen Anzahl an Bits codiert.
Wenn man dabei oft vorkommende Bytes mit wenigen Bits kodiert, dann kann man damit bis zu 87% pro Byte einsparen.


Es ist aber wie überall, es kommt bei der einsparbaren Datenmenge davon abhängig, wie die zu komprimierten Daten aufgebaut sind und welcher Algo zur Komprimierung verwendet wird.

Huffman - wenn alle möglichen Bytes vorkommen und diese möglichen Bytes auch noch schön gleichverteilt sind, dann kann man mit einer Entropiekodierung nichts gut machen ... es würde eventuell sogar mehr/größer, statt kleiner/weniger.

Genauso kann an nichts mit einer Lauflängen-Kodierung ausrichten, wenn es keine/kaum gleiche aufeinanderfolgende Bytes/Zeichen gibt.




Bei großen Texten (weiß jetzt allerdings nicht, wie sich sowas nennt) könnte man auch ein Wörterbuch mit den vorkommenden Wörtern anlegen und speichert dann nur ein kurzes Ersatzmuster, für mehrfach vorkommende Wörter.

Man sucht also größere, sich gleichende Teile und speichert dann im Text nur noch Referenzen auf diese Teile.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Komprimierung : Wie geht das?

  Alt 13. Jul 2010, 16:09
Hm...also ich glaub solangsam versteh ichs.

Hunterprozentig wie man sowas programmiert wäre mir sowieso viel zu kompliziert, da ich noch nicht soooo viuel damit gemacht haben.

Der eigentliche Grund, wie mach sowas macht war das ich bei meinem einem Programm eine AVI Datei hab die 42 MB groß ist. Die wird in einem InnoSetup eingefügt und mit lzma2/ultra komprimierung gepackt. Und was kommt raus..eine 1,62 Mb große Installationsdatei. (war natürlich nicht alles aber das Video war das größte..)

Jetzt hab ich mich gefragt, wie hat das Prog das dan gemacht??????

EDIT: Aber da AVi ja glaub ich net komprimiert ist also viele zeichenfolgen hat, wird mir das jetzt auch klar xD
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#9

AW: Komprimierung : Wie geht das?

  Alt 13. Jul 2010, 16:12
Und wenn Du wirklich voll einsteigen willst, geht es hiermit los: http://de.wikipedia.org/wiki/Informationstheorie

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Virus !!!

  Alt 13. Jul 2010, 16:20
Jupp, das einfache Ur-AVI ist unkomprimiert und entspricht quasi einer Aneinanderreihung von vielen Bitmaps (BMP).
(heutzutage ist .avi aber nur ein Kontainer, in welchem aber ein anderes Format drinsteckt)

Wenn dir jetzt wenig Bewegung und/oder großflächig gleichfarbige Bereiche drin vorkommen, dann kann dort sehr viel und vorallem verlustlos komprimiert werden.
(die meißten Videokomprimierungen sind aber verlustbehaftet ... MPeg ist fast wie aneinandergereihte JPEGs, vn welchen auch nur die veränderten Bereiche gespeichert werden)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 15:55 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