private void LoadGameImageFromStream(Stream data) { var unzip = new UnZipper(data); using (var stream = unzip.GetFileStream(string.Format("{0}/{0}_org.jpg", _stage.Name))) { using (var are = new AutoResetEvent(false)) { Dispatcher.BeginInvoke(() => { var bgBitmap = new BitmapImage(); bgBitmap.SetSource(stream); UpperPictureCanvas.Background = new ImageBrush { ImageSource = bgBitmap }; LowerPictureCanvas.Background = new ImageBrush { ImageSource = bgBitmap }; are.Set(); }); are.WaitOne(); } } // Load all the changes consist in the game file _changes.Clear(); foreach (var filename in unzip.GetFileNamesInZip().Where(s => s.Contains("Change"))) { var change = Regex.Match(filename, ChangeRegex); var fileName = Regex.Match(filename, FileRegex); if (!change.Success || !fileName.Success) continue; if (_changes.Keys.Contains(change.Value)) { _changes[change.Value].Add(fileName.Groups[1].Value); } else { _changes.Add(change.Value, new List<string> { fileName.Groups[1].Value }); } } // Randomly pick 4 of the changes while (_changes.Keys.Count > 6) { _changes.Remove(_changes.Keys.ElementAt(_random.Next(_changes.Keys.Count))); } Dispatcher.BeginInvoke(() => { // Add those changes to the Game var count = 0; foreach (var changeList in _changes.Keys) { foreach (var fileName in _changes[changeList]) { AddImageToGrid(unzip, fileName, string.Format("{0}/{1}/{0}_{2}.jpg", _stage.Name, changeList, fileName), count % 2 == 0 ? UpperPictureGrid : LowerPictureGrid); AddImageToGrid(unzip, fileName, "trans.png", count%2 == 1 ? UpperPictureGrid : LowerPictureGrid); } count++; } GameImageLoadCompleted(); }); }
private void AddImageToGrid(UnZipper unzipFile, string fileName, string filePath, Grid grid) { var fileNameIntVal = int.Parse(fileName) - 1; var colCount = grid.ColumnDefinitions.Count; using (Stream stream = unzipFile.GetFileStream(filePath)) { var img = new Image(); var bitmap = new BitmapImage(); bitmap.SetSource(stream); img.Source = bitmap; Grid.SetRow(img, fileNameIntVal / colCount); Grid.SetColumn(img, fileNameIntVal % colCount); img.Tag = fileName; img.Tap += ImgCellOnTap; grid.Children.Add(img); } }