Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#13

Re: Pfiffiges Speicherformat für Punktlisten gesucht

  Alt 24. Aug 2009, 13:36
Daten "Vorzukomprimieren" und dann erneut durch einen anderen Algo zu komprimieren ist meist nicht effizient.
Sinnvoller ist es die Daten vor dem Komprimieren zu sortieren, daß gleiche Daten hintereinander liegen.

Ich stelle mir das im Prinzip so vor:
Delphi-Quellcode:
TPunkt: record
  x, y: Word;
  dx, dx: Byte;
  Color1, Color2: TColor;
end;

PunktListe: array of TPunkt;

i := Length(PunkteListe);
Stream.Write(i, SizeOf(i));

for i1 := 0 to SizeOf(TPunkt) - 1 do
begin
  for i2 := 0 to High(PunktListe) do
  begin
    p := @(PunktListe[i2]) + i1;
    Stream.Write(p^, 1);
  end;
end;
Selbst wenn jetzt das High-Byte bei allen x/y-Werten Null ist, stehen diese Nullen hintereinander im Stream.
Damit wird selbst simple RLE-Kompression fertig. Man kann die Sortierung auch bis zur Bitebene treiben.
Wenn die Reihenfolge der Punkte egal ist, könnten auch diese sortiert werden.
  Mit Zitat antworten Zitat