Пример #1
0
        public static double CalculateRequiredMemoryForLevel(GameCardsNewDB.Struct.CardsNewDBLevel level)
        {
            double ImgMemoryKoef            = 34;
            double BmpMemoryKoef            = 2.5;
            double GifMemoryKoef            = 80;
            double VideoBitrateKoef         = 40;
            double MediaElementMemoryLenght = 40 * 1024 * 1024;
            //double MaxVideoLenght;
            //if(Is64Bit) MaxVideoLenght = 90 * 1024 * 1024;
            //else MaxVideoLenght = 60 * 1024 * 1024;

            double RequiredMemory = 0;

            foreach (var card in level.DbLevelRecord.Cards)
            {
                string filename = Sets.Settings.GetInstance().DefaultImage;

                if (File.Exists(card.ImageAddress))
                {
                    filename = card.ImageAddress;
                }
                if (!File.Exists(filename))
                {
                    continue;
                }
                string ext      = Path.GetExtension(filename);
                long   FileSize = new FileInfo(filename).Length;
                switch (Path.GetExtension(filename))
                {
                case ".jpg":
                case ".png":
                    RequiredMemory += ImgMemoryKoef * FileSize;
                    break;

                case ".bmp":
                    RequiredMemory += BmpMemoryKoef * FileSize;
                    break;

                case ".gif":
                    RequiredMemory += GifMemoryKoef * FileSize;
                    break;

                case ".avi":
                case ".wmv":
                    var bitrate = Miscellanea.GetVideoBitRate(filename);
                    var tmpsize = (long)(MediaElementMemoryLenght + VideoBitrateKoef * bitrate);
                    RequiredMemory += tmpsize;
                    Console.WriteLine(filename + " bitrate=" + bitrate / 1024 + "  Size=" + (tmpsize / (1024 * 1024)).ToString());
                    break;

                default:
                    break;
                }
            }

            return(RequiredMemory);
        }
Пример #2
0
        public static bool IsBigVideoFilesCheckOk(string[] Filenames)
        {
            //определение наличия файлов большого размера
            Dictionary <string, double> BigBitrateFiles = new Dictionary <string, double>();

            foreach (var filename in Filenames)
            {
                var ext = Path.GetExtension(filename);
                if (!File.Exists(filename) && (ext != ".avi" || ext != ".wmv"))
                {
                    continue;
                }
                var Bitrate = Miscellanea.GetVideoBitRate(filename);
                if (Bitrate > Settings.GetInstance().MaxVideoFileBitrate)
                {
                    BigBitrateFiles.Add(Path.GetFileName(filename), Bitrate / 1024);
                }
            }
            if (BigBitrateFiles.Count > 0)
            {
                string BigLenghtFilesString = "";
                foreach (var BigLenghtFile in BigBitrateFiles)
                {
                    BigLenghtFilesString += BigLenghtFile.Key + " : " + BigLenghtFile.Value.ToString("0") + "kbps\n";
                }
                if (System.Windows.MessageBox.Show("Некоторые файлы видео имеют очень высокий битрейт (большое разрешение, частоту и т.п.)," +
                                                   " что может замедлить работу, " +
                                                   "вызвать недостаток оперативной памяти, в том числе в ходе " +
                                                   "игры при выборе уровня с большим количеством таких файлов:\n\n" +
                                                   BigLenghtFilesString + "\nВсе равно открыть указанные файлы?",
                                                   "Очень большие файлы",
                                                   (MessageBoxButton)MessageBoxButtons.YesNo,
                                                   (MessageBoxImage)MessageBoxIcon.Information) == MessageBoxResult.No)
                {
                    return(false);
                }
            }
            return(true);
        }