private void ParseCopyFilter(int streamId, TightDecoder decoder) { var size = rectangle.Width * rectangle.Height * 3; if (size == 0) { return; } var data = ReadBasicData(size, streamId, decoder); var tile = new int[rectangle.Width * rectangle.Height]; var j = 0; for (var y = 0; y < rectangle.Height; y++) { for (var x = 0; x < rectangle.Width; x++) { tile[y * rectangle.Width + x] = (data[j + 2] & 0xFF) | (data[j + 1] << 8) | (data[j] << 16) | (0xFF << 24); j += 3; } } FillRectangle(rectangle, tile); }
private byte[] ReadBasicData(int size, int streamId, TightDecoder decoder) { byte[] data; if (size < 12) { data = rfb.ReadBytes(size); } else { data = ReadCompactData(); decoder.Streams[streamId].SetData(data); data = decoder.Streams[streamId].Inflate(size); } return(data); }
private void ParsePaletteFilter(int streamId, TightDecoder decoder) { var numColors = rfb.ReadByte() + 1; var palette = Array.ConvertAll(rfb.ReadBytes(numColors * 3), Convert.ToInt32); var size = numColors == 2 ? rectangle.Height * ((rectangle.Width + 7) / 8) : rectangle.Width * rectangle.Height; if (size == 0) { return; } var data = ReadBasicData(size, streamId, decoder); if (numColors == 2) { MonoRect(data, palette); } else { PaletteRect(data, palette); } }
private void ParseGradientFilter(int streamId, TightDecoder decoder) { }