public static System.IO.MemoryStream WriteBCA(BCA.Binarys.BinaryFile file) { System.IO.MemoryStream ms = new System.IO.MemoryStream(); System.IO.BinaryWriter bw = new System.IO.BinaryWriter(ms); #region File Header bw.Write(file.FHeader.fType); bw.Write(file.FHeader.fSize); bw.Write(file.FHeader.fReserved); bw.Write(file.FHeader.fBcaOffset); #endregion #region BCA Header bw.Write(file.BHeader.hSize); bw.Write(file.BHeader.hVersion); bw.Write(file.BHeader.hFrameOffset); bw.Write(file.BHeader.hFPS); bw.Write(file.BHeader.hFrameCount); bw.Write(file.BHeader.hReserved); #endregion #region Frames for (int f = 0; f < file.FrameList.Count; f++) { #region Frame Header bw.Write(file.FrameList[f].FrameHeader.fhSize); bw.Write((ushort)file.FrameList[f].FrameHeader.fhDeviceCount); bw.Write(file.FrameList[f].FrameHeader.fhDataSize); #endregion #region Frame Data for (int i = 0; i < file.FrameList[f].DeviceList.Count; i++) { #region Device Header bw.Write(file.FrameList[f].DeviceList[i].DeviceHeader.dhSize); bw.Write((byte)file.FrameList[f].DeviceList[i].DeviceHeader.dhDataType); bw.Write((ushort)file.FrameList[f].DeviceList[i].DeviceHeader.dhDevice); bw.Write(file.FrameList[f].DeviceList[i].DeviceHeader.dhDataSize); #endregion #region Device Data for (int d = 0; d < file.FrameList[f].DeviceList[i].DeviceDataList.Count; d++) { bw.Write(file.FrameList[f].DeviceList[i].DeviceDataList[d].dRow); bw.Write(file.FrameList[f].DeviceList[i].DeviceDataList[d].dCol); bw.Write(file.FrameList[f].DeviceList[i].DeviceDataList[d].dABGR); } #endregion } #endregion } #endregion return(ms); }
/// <summary> /// Creates a playable animation from a binary file /// </summary> /// <param name="bca">BCA file</param> /// <returns></returns> public static Animation FromBCA(BCA.Binarys.BinaryFile bca) { Animation animation = new Animation(); animation.FPS = bca.BHeader.hFPS; for (int i = 0; i < bca.BHeader.hFrameCount; i++) { Frame lastFrame = null; if (i != 0) { lastFrame = animation.Frames[i - 1]; } animation.Frames.Add(AFrameFromBFrame(bca.FrameList[i], lastFrame)); } return(animation); }