private void CreateImagesFromAnimationFile(byte[] array) { CreateOffsetAndSizeInByteArrayList(array); //Image Header has a length of 16 bytes for (int i = 0; i < this.fileHeader.INumberOfPictureinFile; i++) { images[i].Width = BitConverter.ToUInt16(array, actualPositionInByteArray + i * TGXImage.iImageHeaderSize + 0); images[i].Height = BitConverter.ToUInt16(array, actualPositionInByteArray + i * TGXImage.iImageHeaderSize + 2); images[i].OffsetX = BitConverter.ToUInt16(array, actualPositionInByteArray + i * TGXImage.iImageHeaderSize + 4); images[i].OffsetY = BitConverter.ToUInt16(array, actualPositionInByteArray + i * TGXImage.iImageHeaderSize + 6); images[i].ImagePart = array[actualPositionInByteArray + i * TGXImage.iImageHeaderSize + 8]; images[i].SubParts = array[actualPositionInByteArray + i * TGXImage.iImageHeaderSize + 9]; images[i].TileOffset = BitConverter.ToUInt16(array, actualPositionInByteArray + i * TGXImage.iImageHeaderSize + 10); images[i].Direction = array[actualPositionInByteArray + i * TGXImage.iImageHeaderSize + 12]; images[i].HorizontalOffsetOfImage = array[actualPositionInByteArray + i * TGXImage.iImageHeaderSize + 13]; images[i].BuildingWidth = array[actualPositionInByteArray + i * TGXImage.iImageHeaderSize + 14]; images[i].AnimatedColor = array[actualPositionInByteArray + i * TGXImage.iImageHeaderSize + 15]; } actualPositionInByteArray += (int)this.fileHeader.INumberOfPictureinFile * TGXImage.iImageHeaderSize; foreach (var image in images) { image.ImgFileAsBytearray = new byte[(int)image.SizeinByteArray]; Buffer.BlockCopy(array, actualPositionInByteArray + (int)image.OffsetinByteArray, image.ImgFileAsBytearray, 0, (int)image.SizeinByteArray); } for (int i = 0; i < 9; i++) { for (int j = 0; j < fileHeader.INumberOfPictureinFile; j++) { var dummy = new TGXImage(); dummy.Width = images[j].Width; dummy.Height = images[j].Height; dummy.OffsetX = images[j].OffsetX; dummy.OffsetY = images[j].OffsetY; dummy.ImagePart = images[j].ImagePart; dummy.SubParts = images[j].SubParts; dummy.TileOffset = images[j].TileOffset; dummy.Direction = images[j].Direction; dummy.HorizontalOffsetOfImage = images[j].HorizontalOffsetOfImage; dummy.BuildingWidth = images[j].BuildingWidth; dummy.AnimatedColor = images[j].AnimatedColor; dummy.ImgFileAsBytearray = images[j].ImgFileAsBytearray; images.Add(dummy); } } for (uint i = 0; i < images.Count; i++) { images[(int)i].CreateImageFromByteArray(palette, fileHeader, i / fileHeader.INumberOfPictureinFile); } }
private void CreateOffsetAndSizeInByteArrayList(byte[] array) { for (int i = 0; i < this.fileHeader.INumberOfPictureinFile; i++) { var image = new TGXImage(); image.OffsetinByteArray = BitConverter.ToUInt32(array, actualPositionInByteArray + i * 4); images.Add(image); } actualPositionInByteArray += (int)this.fileHeader.INumberOfPictureinFile * 4; for (int i = 0; i < this.fileHeader.INumberOfPictureinFile; i++) { images[i].SizeinByteArray = BitConverter.ToUInt32(array, actualPositionInByteArray + i * 4); } actualPositionInByteArray += (int)this.fileHeader.INumberOfPictureinFile * 4; }