Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure RLE_Compression (FileName, RLEFileName: String);
- var
- count, value, pref, x, i: byte;
- begin
- pref := Min(FileName);
- AssignFile(File_in, FileName);
- Reset(File_in);
- AssignFile(File_out, RLEFileName);
- Rewrite(File_out);
- Write(File_out, pref);
- count:=0;
- while not eof(file_in) do begin
- read(file_in, x);
- if count = 0 then begin
- value := x;
- end;
- if (value = x) and (count < 255) then begin
- inc(count);
- end else begin
- if count <= 2 then begin
- if value <> pref then begin
- for i := 1 to count do Write(File_Out, value);
- end
- else begin
- Write(File_Out, pref, count);
- end;
- end else begin
- Write(File_Out, pref, count, value);
- end;
- count := 1;
- value := x;
- end;
- end;
- if count <= 2 then begin
- if value <> pref then begin
- for i := 1 to count do Write(File_Out, value);
- end
- else begin
- Write(File_Out, pref, count);
- end;
- end else begin
- Write(File_Out, pref, count, value);
- end;
- procedure RLE_Uncompression(RLEFileName, FileName: string);
- var
- count, value, pref, i: byte;
- begin
- AssignFile(File_in, RLEFileName);
- Reset(File_in);
- AssignFile(File_out, FileName);
- Rewrite(File_out);
- Read(File_In, pref);
- while not eof(File_in) do begin
- Read(File_in, value);
- if value = pref then begin
- Read(File_in, count);
- if count > 2 then begin
- Read(file_in, value);
- for i := 1 to count do begin
- Write(File_out, value);
- end;
- end else begin
- for i := 1 to count do begin
- Write(File_out, pref);
- end;
- end;
- end else Write(file_out, value);
- end;
- CloseFile(File_in);
- CloseFile(File_out);
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement