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.