static MemoryStream GetRLEStream (MemoryStream input, int start)
{
MemoryStream result = new MemoryStream ();
byte [] ibuffer = input.GetBuffer ();
result.Write (ibuffer, 0, start);
input.Position = start;
int prev = -1;
int count = 0;
int current;
while ((current = input.ReadByte ()) != -1) {
if (prev != current || count == 255) {
if (prev != -1) {
result.WriteByte ((byte) count);
result.WriteByte ((byte) prev);
}
prev = current;
count = 0;
}
count++;
}
if (count > 0) {
result.WriteByte ((byte) count);
result.WriteByte ((byte) current);
}
return result;
}