private byte[] EncodeSurfStream(TS_SURFCMD_STREAM_SURF_BITS surfStreamData)
{
List<byte> buffer = new List<byte>();
RdpbcgrEncoder.EncodeStructure(buffer, (ushort)surfStreamData.cmdType);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.destLeft);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.destTop);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.destRight);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.destBottom);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.bitmapData.bpp);
RdpbcgrEncoder.EncodeStructure(buffer, (byte)surfStreamData.bitmapData.flags);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.bitmapData.reserved);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.bitmapData.codecID);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.bitmapData.width);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.bitmapData.height);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.bitmapData.bitmapDataLength);
if(surfStreamData.bitmapData.exBitmapDataHeader != null)
{
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.bitmapData.exBitmapDataHeader.highUniqueId);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.bitmapData.exBitmapDataHeader.lowUniqueId);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.bitmapData.exBitmapDataHeader.tmMilliseconds);
RdpbcgrEncoder.EncodeStructure(buffer, surfStreamData.bitmapData.exBitmapDataHeader.tmSeconds);
}
if (surfStreamData.bitmapData.bitmapData != null)
{
RdpbcgrEncoder.EncodeBytes(buffer, surfStreamData.bitmapData.bitmapData);
}
return buffer.ToArray();
}