public void Deserialize(byte[] buffer, ref int offset, ref Bitmap img) { // Read data size int size = (int)SerializerBinary.ReadUInt32Fixed(buffer, ref offset); // Copy data into stream if (_sharedMemoryStream == null) { _sharedMemoryStream = new MemoryStream(size); } else if (_sharedMemoryStream.Capacity < size) { _sharedMemoryStream.Capacity = size; } var ms = _sharedMemoryStream; ms.Position = 0; var memoryStreamBuffer = ms.GetBuffer(); if (size > 0) { SerializerBinary.FastCopy(buffer, offset, memoryStreamBuffer, 0, size); } // Now we can load the image back from the stream ms.Position = 0; img = new Bitmap(ms); offset += size; }
public override void Execute(object target, byte[] buffer, ref int offset) { var size = SerializerBinary.ReadUInt32Fixed(buffer, ref offset); TMember value = default; _formatter.Deserialize(buffer, ref offset, ref value); _propSetter(target, value); }
public void Deserialize(byte[] buffer, ref int offset, ref Bitmap img) { // Read data size int size = (int)SerializerBinary.ReadUInt32Fixed(buffer, ref offset); // Prepare memory stream if (_sharedMemoryStream == null) { _sharedMemoryStream = new MemoryStream(size); } else if (_sharedMemoryStream.Capacity < size) { _sharedMemoryStream.Capacity = size; } var stream = _sharedMemoryStream; if (size < 0) { throw new InvalidOperationException($"Invalid bitmap size: {size} bytes"); } else if (size == 0) { img = null; return; } // Copy bitmap data into the stream-buffer stream.SetLength(size); stream.Position = 0; var streamBuffer = stream.GetBuffer(); SerializerBinary.FastCopy(buffer, (uint)offset, streamBuffer, 0, (uint)size); stream.Position = 0; img = new Bitmap(stream); offset += size; }
public override void Execute(object target, byte[] buffer, ref int offset) { var size = SerializerBinary.ReadUInt32Fixed(buffer, ref offset); offset += (int)size; }