Microsoft.Protocols.TestTools.StackSdk.RemoteDesktop.Rdpbcgr.TS_FP_UPDATE_PDU.EncodeBitmap C# (CSharp) Method

EncodeBitmap() private method

private EncodeBitmap ( TS_FP_UPDATE_BITMAP bitmapData ) : byte[]
bitmapData TS_FP_UPDATE_BITMAP
return byte[]
        private byte[] EncodeBitmap(TS_FP_UPDATE_BITMAP bitmapData)
        {
            List<byte> totalBuffer = new List<byte>();
            List<byte> buffer = new List<byte>();

            RdpbcgrEncoder.EncodeStructure(buffer, (ushort)bitmapData.bitmapUpdateData.updateType);
            RdpbcgrEncoder.EncodeStructure(buffer, bitmapData.bitmapUpdateData.numberRectangles);
            if (bitmapData.bitmapUpdateData.rectangles != null)
            {
                for (int i = 0; i < bitmapData.bitmapUpdateData.rectangles.Length; ++i)
                {
                    RdpbcgrEncoder.EncodeStructure(buffer, bitmapData.bitmapUpdateData.rectangles[i].destLeft);
                    RdpbcgrEncoder.EncodeStructure(buffer, bitmapData.bitmapUpdateData.rectangles[i].destTop);
                    RdpbcgrEncoder.EncodeStructure(buffer, bitmapData.bitmapUpdateData.rectangles[i].destRight);
                    RdpbcgrEncoder.EncodeStructure(buffer, bitmapData.bitmapUpdateData.rectangles[i].destBottom);
                    RdpbcgrEncoder.EncodeStructure(buffer, bitmapData.bitmapUpdateData.rectangles[i].width);
                    RdpbcgrEncoder.EncodeStructure(buffer, bitmapData.bitmapUpdateData.rectangles[i].height);
                    RdpbcgrEncoder.EncodeStructure(buffer, bitmapData.bitmapUpdateData.rectangles[i].bitsPerPixel);
                    RdpbcgrEncoder.EncodeStructure(buffer, (ushort)bitmapData.bitmapUpdateData.rectangles[i].Flags);
                    RdpbcgrEncoder.EncodeStructure(buffer, bitmapData.bitmapUpdateData.rectangles[i].bitmapLength);
                    if ((bitmapData.bitmapUpdateData.rectangles[i].Flags & TS_BITMAP_DATA_Flags_Values.NO_BITMAP_COMPRESSION_HDR)
                        == TS_BITMAP_DATA_Flags_Values.None)
                    {
                        RdpbcgrEncoder.EncodeStructure(
                            buffer, (ushort)bitmapData.bitmapUpdateData.rectangles[i].bitmapComprHdr.cbCompFirstRowSize);
                        RdpbcgrEncoder.EncodeStructure(
                            buffer, bitmapData.bitmapUpdateData.rectangles[i].bitmapComprHdr.cbCompMainBodySize);
                        RdpbcgrEncoder.EncodeStructure(
                            buffer, bitmapData.bitmapUpdateData.rectangles[i].bitmapComprHdr.cbScanWidth);
                        RdpbcgrEncoder.EncodeStructure(
                            buffer, bitmapData.bitmapUpdateData.rectangles[i].bitmapComprHdr.cbUncompressedSize);
                    }
                    if (bitmapData.bitmapUpdateData.rectangles[i].bitmapDataStream != null)
                    {
                        if ((bitmapData.bitmapUpdateData.rectangles[i].Flags & TS_BITMAP_DATA_Flags_Values.BITMAP_COMPRESSION)
                            == TS_BITMAP_DATA_Flags_Values.BITMAP_COMPRESSION)
                        {
                            byte[] temp = serverSessionContext.Compress(bitmapData.compressionFlags, bitmapData.bitmapUpdateData.rectangles[i].bitmapDataStream);
                            bitmapData.bitmapUpdateData.rectangles[i].bitmapDataStream = temp;
                            RdpbcgrEncoder.EncodeBytes(buffer, bitmapData.bitmapUpdateData.rectangles[i].bitmapDataStream);
                        }
                        else
                        {
                            RdpbcgrEncoder.EncodeBytes(buffer, bitmapData.bitmapUpdateData.rectangles[i].bitmapDataStream);
                        }
                    }
                }
            }

            if (bitmapData.compressionFlags != compressedType_Values.None)
            {
                RdpbcgrEncoder.EncodeBytes(
                    totalBuffer, serverSessionContext.Compress(bitmapData.compressionFlags, buffer.ToArray()));
            }
            else
            {
                RdpbcgrEncoder.EncodeBytes(totalBuffer, buffer.ToArray());
            }

            return totalBuffer.ToArray();
        }