public Arquivo_PLS(Arquivo_PLS oldValue) { this.versao = oldValue.versao; this.formato = new byte[oldValue.formato.Length]; oldValue.formato.CopyTo(this.formato, 0); this.qtdArquivos = oldValue.qtdArquivos; this.listaVideos = new List <Video>(); foreach (Video iv in oldValue.listaVideos) { //IVideo ivTemp = iv; if (iv is VideoV01) { this.listaVideos.Add(new VideoV01((VideoV01)iv)); } if (iv is VideoV02) { this.listaVideos.Add(new VideoV02((VideoV02)iv)); } //if (iv is VideoV03) // this.listaVideos.Add(new VideoV03((VideoV03)iv)); if (iv is VideoV04) { this.listaVideos.Add(new VideoV04((VideoV04)iv)); } } foreach (String s in oldValue.listaPaths) { this.listaPaths.Add(s); } }
public void LoadFromBytes(byte[] dados) { if (null == this.listaVideos) { this.listaVideos = new List <IVideo>(); } unsafe { fixed(byte *pSrc = dados) { FormatoVideo04 *listaArquivos = (FormatoVideo04 *)pSrc; Byte[] temporario = new byte[listaArquivos->qntFrames]; listaArquivos->Tamanho = (UInt32)dados.Length; this.versao = listaArquivos->versao; uint qtdFrames = listaArquivos->qntFrames; // Limpa a lista this.listaVideos.Clear(); int indice = sizeof(FormatoVideo04) - sizeof(UInt32); for (int i = 0; i < qtdFrames; i++) { FormatoFrame temporaria = new FormatoFrame(); temporaria.x = BitConverter.ToUInt32(dados, indice); indice += sizeof(uint); temporaria.y = BitConverter.ToUInt32(dados, indice); indice += sizeof(uint); temporaria.height = BitConverter.ToUInt32(dados, indice); indice += sizeof(uint); temporaria.width = BitConverter.ToUInt32(dados, indice); indice += sizeof(uint); listaFrames.Add(temporaria); // Pegar o tamanho do Arquivo uint tamanhoArquivo = BitConverter.ToUInt32(dados, indice); byte[] dadosVideo = new byte[tamanhoArquivo]; Array.Copy(dados, indice, dadosVideo, 0, tamanhoArquivo); // índice do tamanho indice += sizeof(uint); // índice da versão indice++; // Pegar o formato do Arquivo Ex.: V02 if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V01")) { // Instancia o video a partir do formato VideoV01 video = new VideoV01(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video listaVideos.Add(video); } else if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V02")) { // Instancia o video a partir do formato VideoV02 video = new VideoV02(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video listaVideos.Add(video); } else if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("PLS")) { // Instancia o video a partir do formato Arquivo_PLS video = new Arquivo_PLS(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video listaVideos.Add(video); } indice = indice + dadosVideo.Length - (sizeof(uint) + 1 /*tamanho da versão*/); } } } }