public void make(ref PageArrayBin pageArrayBin, ref SVSerialize serialize) { UInt32 pageCount = pageArrayBin.pageCount; UInt32 heartCount = pageArrayBin.pageArray[pageCount].tickNum++; if (pageArrayBin.pageArray[pageCount].m_tick == null) { pageArrayBin.pageArray[pageCount].m_tick = new TickBin[SVLimit.PAGE_TICKGIF_MAXNUM]; } TickBin tickBin = pageArrayBin.pageArray[pageCount].m_tick[heartCount]; tickBin.imageOffsetList = new UInt32[8]; tickBin.id = ID; tickBin.rect.sX = (UInt16)Rect.X; tickBin.rect.sY = (UInt16)Rect.Y; tickBin.rect.eX = (UInt16)(Rect.Width + tickBin.rect.sX - 1); tickBin.rect.eY = (UInt16)(Rect.Height + tickBin.rect.sY - 1); ///保存所有图片数据 List <SVBitmap> list = _bitMapArray.imageArray(); tickBin.count = (Byte)list.Count; for (int i = 0; i < list.Count; i++) { var offset = list[i]; tickBin.imageOffsetList[i] = (UInt32)serialize.ToArray().Length; serialize.pack(offset.bitmap8Data(Rect.Width, Rect.Height)); } pageArrayBin.pageArray[pageCount].m_tick[heartCount] = tickBin; }
/// <summary> /// 从二进制数据中解析心跳控件数据 /// 并在界面上设置响应的值和事件 /// </summary> /// <param Name="tickBin">心跳控件内存数据</param> /// <param Name="picBuffer">图片数据</param> internal void fromBin(TickBin tickBin, byte[] picBuffer) { ///设置控件位置和大小 this.Location = new Point(tickBin.rect.sX, tickBin.rect.sY); this.Width = tickBin.rect.eX - tickBin.rect.sX; this.Height = tickBin.rect.eY - tickBin.rect.sY; ///保存当前心跳控件中的所有图片到一个队列中 Int32 count = tickBin.count; List <Bitmap> bitmapList = new List <Bitmap>(); for (int i = 0; i < count; i++) { SVPixmapFile file = new SVPixmapFile(); Bitmap bitmap = file.getFromFile(picBuffer, tickBin.imageOffsetList[i]); bitmapList.Add(bitmap); } ///根据用户输入来显示对应图片 _dataControl.Num.Minimum = 1; _dataControl.Num.Maximum = count; _dataControl.Num.Increment = 1; _dataControl.Num.ValueChanged += new EventHandler((sender, e) => { Int32 nIndex = (Int32)_dataControl.Num.Value - 1; this.BackgroundImage = bitmapList[nIndex]; }); ///按照定时器的时间循环播放图片 Int32 index = 0; _timer.Tick += new EventHandler((sender, e) => { if (!_dataControl.AutoPlay.Checked) { return; } this.BackgroundImage = bitmapList[index]; index++; _dataControl.Num.Value = index; if (index == count) { index = 0; } }); }