public List <KeyFrame> GenerateInbetweenFrames(KeyFrame firstKeyFrame, KeyFrame secondKeyFrame) { List <KeyFrame> newFrames = new List <KeyFrame>(this.GeneratedFrameCount); double interval = (secondKeyFrame.StartTime - firstKeyFrame.StartTime).TotalMilliseconds; for (int index = 0; index < this.GeneratedFrameCount; index++) { TimeSpan frameStart = firstKeyFrame.StartTime + new TimeSpan(0, 0, 0, 0, (int)(interval * index)); KeyFrame newFrame = new KeyFrame(secondKeyFrame.RowCount, secondKeyFrame.ColumnCount, frameStart, null); for (int row = 0; row < secondKeyFrame.RowCount; row++) { for (int col = 0; col < secondKeyFrame.ColumnCount; col++) { int redDistance = secondKeyFrame.Get(row, col).Red - firstKeyFrame.Get(row, col).Red; int blueDistance = secondKeyFrame.Get(row, col).Green - firstKeyFrame.Get(row, col).Green; int greenDistance = secondKeyFrame.Get(row, col).Blue - firstKeyFrame.Get(row, col).Blue; newFrame.Set(row, col, new Color( (byte)(redDistance * index), (byte)(greenDistance * index), (byte)(blueDistance * index))); } } newFrames[index] = newFrame; } return(newFrames); }
public List<KeyFrame> GenerateInbetweenFrames(KeyFrame firstKeyFrame, KeyFrame secondKeyFrame) { List<KeyFrame> newFrames = new List<KeyFrame>(this.GeneratedFrameCount); double interval = (secondKeyFrame.StartTime - firstKeyFrame.StartTime).TotalMilliseconds; for (int index = 0; index < this.GeneratedFrameCount; index++) { TimeSpan frameStart = firstKeyFrame.StartTime + new TimeSpan(0, 0, 0, 0, (int)(interval * index)); KeyFrame newFrame = new KeyFrame(secondKeyFrame.RowCount, secondKeyFrame.ColumnCount, frameStart, null); for (int row = 0; row < secondKeyFrame.RowCount; row++) { for (int col = 0; col < secondKeyFrame.ColumnCount; col++) { int redDistance = secondKeyFrame.Get(row, col).Red - firstKeyFrame.Get(row, col).Red; int blueDistance = secondKeyFrame.Get(row, col).Green - firstKeyFrame.Get(row, col).Green; int greenDistance = secondKeyFrame.Get(row, col).Blue - firstKeyFrame.Get(row, col).Blue; newFrame.Set(row, col, new Color( (byte)(redDistance * index), (byte)(greenDistance * index), (byte)(blueDistance * index))); } } newFrames[index] = newFrame; } return newFrames; }
/// <summary> /// Send a keyframe to the microcontroller using the packet protocol /// </summary> /// <param name="currentFrame"></param> private void SendFrameToSerial(KeyFrame currentFrame) { int packetSize = currentFrame.RowCount * currentFrame.ColumnCount * 3; byte[] packet = new byte[packetSize]; for (int row = 0; row < currentFrame.RowCount; ++row) { for (int col = 0; col < currentFrame.ColumnCount; ++col) { int windowOffset = (row * currentFrame.ColumnCount + col) * 3; packet[windowOffset + 0] = currentFrame.Get(row, col).Red; packet[windowOffset + 1] = currentFrame.Get(row, col).Green; packet[windowOffset + 2] = currentFrame.Get(row, col).Blue; } } Debug.WriteLine("Sending frame to serial"); packetProtocol.snd_ascii_hex(serial_packet_protocol.packet_types.SEND_BUFFER_TYPE, packet, packet.Length); }