public void BitmapAcquiredCBHandler(Bitmap aNewBitmap) { stopwatch.Restart(); //Console.WriteLine("BitmapAcquiredCBHandler:"); //Console.WriteLine("From CameraId " + GetID()); byte[] newBA = aCodecUtility.CompressBmpToJPEGArray(aNewBitmap); //byte[] newBA = (byte[])converter.ConvertTo(aNewBitmap, typeof(byte[])); //Total size of the packet to send including header + data. PacketPartitionner pp = new PacketPartitionner(GetID(), newBA.Length, Packet.GetHeaderSize() + Packet.DEFAULT_PACKET_SIZE, null); pp.PartitionFile(newBA, newBA.Length); //Console.WriteLine("Bitmap of size:" + newBA.Length + ", Splitted in:" + pp.GetPartitionnedPackets().Count + "Packets of " + (Packet.GetHeaderSize() + Packet.DEFAULT_PACKET_SIZE) + " Bytes"); //Remove prints to the console //This is a critical section, we don't to have more than 1 camera sending data at the same time. for (int i = 0; i < pp.GetPartitionnedPackets().Count; i++) { //Console.WriteLine("Send packet number:" + i + "/" + (pp.GetPartitionnedPackets().Count - 1)); //((Packet)pp.GetPartitionnedPackets()[i]).PrintInfo(); Packet p = ((Packet)(pp.GetPartitionnedPackets()[i])); byte[] SerializedPacket = p.GetBytes(); //aUDPSender.SendDataUDP(SerializedPacket, SerializedPacket.Length); aUDPSender.SendNow(SerializedPacket, SerializedPacket.Length); Thread.Sleep(10); } //Thread.Sleep(100); //clear the array list so you dont send alway the same image. //pp.GetPartitionnedPackets().Clear(); stopwatch.Stop(); // Write result //Console.WriteLine("Time elapsed ms: {0}", stopwatch.ElapsedMilliseconds); }