System.Windows.Forms.ImageListStreamer.GetRLEStream C# (CSharp) Method

GetRLEStream() static private method

static private GetRLEStream ( MemoryStream input, int start ) : MemoryStream
input System.IO.MemoryStream
start int
return System.IO.MemoryStream
		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;
		}