예제 #1
0
        private static void GeneratePreviews(List <Parameter> parameters, Bitmap[] images, string outputDirectory, string baseName)
        {
            Logger.Debug("Generating previews...");

            var states        = GetPreviewStates();
            var staticPreview = PreviewGenerator.CreateImage(parameters, images, new WatchState(), previewSize);

            staticPreview.Save(Path.Combine(outputDirectory, $"{baseName}_static.png"), ImageFormat.Png);

            var previewImages = PreviewGenerator.CreateAnimation(parameters, images, states, previewSize);

            if (IsRunningOnMono)
            {
                var i = 0;
                foreach (var previewImage in previewImages)
                {
                    previewImage.Save(Path.Combine(outputDirectory, $"{baseName}_animated_{i}.png"), ImageFormat.Png);
                    i++;
                }
            }
            else
            {
                using (var gif = AnimatedGif.AnimatedGif.Create(Path.Combine(outputDirectory, $"{baseName}_animated.gif"), 1000))
                    foreach (var previewImage in previewImages)
                    {
                        gif.AddFrame(previewImage, quality: AnimatedGif.GifQuality.Bit8);
                    }
            }
        }
예제 #2
0
        //[ResponseCache(Location = ResponseCacheLocation.Any, Duration = int.MaxValue, VaryByHeader = "Cookie", VaryByQueryKeys = new[] { "accountId", "itemId" })]
        public async Task <IActionResult> FeaturedImage(Guid accountId, Guid itemId)
        {
            var account = DataRepository.Get <Account>(accountId);
            var item    = new KeyValuePair <int, WishlistItem>();

            foreach (var year in account.Wishlist.Keys)
            {
                var match = account.Wishlist[year].FirstOrDefault(x => x.Id == itemId);
                if (match != null)
                {
                    item = new KeyValuePair <int, WishlistItem>(year, match);
                    break;
                }
            }

            if (item.Value.PreviewImage == null || item.Value.PreviewImage.Length == 0)
            {
                account.Wishlist[item.Key].Remove(item.Value);
                item.Value.PreviewImage = await PreviewGenerator.GetFeaturedImage(item.Value.Url);

                account.Wishlist[item.Key].Add(item.Value);
                DataRepository.Save(account);
            }

            return(File(item.Value.PreviewImage, "image/jpg"));
        }
예제 #3
0
        private static void GeneratePreviews(List <Parameter> parameters, Bitmap[] images, string outputDirectory, string baseName)
        {
            Logger.Debug("Generating previews...");

            var states        = GetPreviewStates();
            var staticPreview = PreviewGenerator.CreateImage(parameters, images, new WatchState());

            staticPreview.Save(Path.Combine(outputDirectory, $"{baseName}_static.png"), ImageFormat.Png);

            var previewImages = PreviewGenerator.CreateAnimation(parameters, images, states);

            if (IsRunningOnMono)
            {
                var i = 0;
                foreach (var previewImage in previewImages)
                {
                    previewImage.Save(Path.Combine(outputDirectory, $"{baseName}_animated_{i}.png"), ImageFormat.Png);
                    i++;
                }
            }
            else
            {
                using (var gifOutput = File.OpenWrite(Path.Combine(outputDirectory, $"{baseName}_animated.gif")))
                    using (var encoder = new GifEncoder(gifOutput))
                    {
                        foreach (var previewImage in previewImages)
                        {
                            encoder.AddFrame(previewImage, frameDelay: TimeSpan.FromSeconds(1));
                        }
                    }
            }
        }
예제 #4
0
        public void GenerateMap(int width, int height, int border, int players, CancellationToken token)
        {
            IsGenerating = true;

            try
            {
                CreateMap(width, height, border, players, Settings.Scenery.Weather, Settings.TimeOfDay);

                info = new MapInfo(MapId, Map.HeightMap.Width, Map.HeightMap.Height, Settings, players, token);

                int previewCount = 0;

                string message = null;
                foreach (var processor in Processors)
                {
                    if (token != null && token.IsCancellationRequested)
                    {
                        IsGenerating = false;
                        token.ThrowIfCancellationRequested();
                    }

                    message = processor.Description;
                    if (!string.IsNullOrWhiteSpace(message) && Log != null)
                    {
                        Log(processor, new LogEventArgs(message));
                    }

                    processor.Process(Map, info);

                    if (processor.UpdatePreview)
                    {
                        Task.Factory.StartNew(() =>
                        {
                            int count = Interlocked.Increment(ref previewCount);
                            PreviewGenerator.Process(Map, info);

                            if (count == previewCount && PreviewUpdated != null)
                            {
                                byte[] bmpPreview;
                                lock (PreviewGenerator.Lock)
                                {
                                    bmpPreview = PreviewGenerator.BmpPreview;
                                }
                                if (count == previewCount && PreviewUpdated != null)
                                {
                                    PreviewUpdated(this, new PreviewUpdatedEventArgs(bmpPreview));
                                }
                            }
                        });
                    }
                }
            }
            finally
            {
                IsGenerating = false;
            }
        }
 void Start()
 {
     if (PreviewGenerator == null)
     {
         PreviewGenerator = new PreviewGenerator();
     }
     PreviewGenerator.Initialize();
     PreviewGenerator.bRepaintNeeded = true;
 }
예제 #6
0
        private void GeneratePreviewGif()
        {
            _generator       = new PreviewGenerator(ViewModel.Settings.FfmpegPath);
            _generator.Done += GeneratorOnDone;

            GeneratorEntry entry = _generator.CreateEntry(_settings);

            _generator.ProcessInThread(_settings, entry);
        }
예제 #7
0
        public static async void EditItem(Account account, WishlistItem item)
        {
            WishlistItem remove = account.Wishlist[DateHelper.Year].SingleOrDefault(i => i.Id.Equals(item.Id));

            account.Wishlist[DateHelper.Year].Remove(remove);
            item.PreviewImage = await PreviewGenerator.GetFeaturedImage(item.Url);

            account.Wishlist[DateHelper.Year].Add(item);
            DataRepository.Save(account);
        }
예제 #8
0
 /// <summary>
 /// Регистрация одного обработчика на несколько типов
 /// </summary>
 static void Register(string[] types, PreviewGenerator pg)
 {
     foreach (string t in types)
     {
         string nt = t.ToLower();
         if (!Preview.Generators.ContainsKey(nt))
         {
             Preview.Generators.Add(nt, pg);
         }
     }
 }
예제 #9
0
        public static async void AddItem(Account account, WishlistItem item)
        {
            if (!account.Wishlist.ContainsKey(DateHelper.Year))
            {
                account.Wishlist.Add(DateHelper.Year, new List <WishlistItem>());
            }
            item.Id           = Guid.NewGuid();
            item.PreviewImage = await PreviewGenerator.GetFeaturedImage(item.Url);

            account.Wishlist[DateHelper.Year].Add(item);
            DataRepository.Save(account);
        }
예제 #10
0
    public override void OnInspectorGUI()
    {
        serializedObject.Update();
        base.OnInspectorGUI();
        serializedObject.ApplyModifiedProperties();

        PreviewGenerator previewGenerator = ((PreviewGeneratorComponent)serializedObject.targetObject).PreviewGenerator;

        if (previewGenerator.bRepaintNeeded)
        {
            Repaint();
        }
    }
예제 #11
0
        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(env.ContentRootPath)
                          .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                          .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                          .AddJsonFile($"appsettings.secrets.json", optional: true)
                          .AddEnvironmentVariables();

            Configuration = builder.Build();
            AppSettings.Initialize(Configuration);
            DataRepository.Initialize(env.ContentRootPath);
            PreviewGenerator.Initialize(env.WebRootPath);
        }
예제 #12
0
        public void SaveScene(object sender, EventArgs e)
        {
            if (InvokeRequired)
            {
                BeginInvoke(new MethodInvoker(delegate() { SaveScene(sender, e); }));
            }
            else
            {
                //saveFileDialog1.Filter = "Scene files (*.cws)|*.cws|STL File (*.stl)|*.stl";
                saveFileDialog1.Filter      = "Scene files (*." + SceneFileExt + ")|*." + SceneFileExt + "|STL File (*.stl)|*.stl";
                saveFileDialog1.FilterIndex = 0;
                if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    //check the filter index
                    switch (saveFileDialog1.FilterIndex) // index starts at 1 instead of 0
                    {
                    case 1:
                        SceneFile.Instance().SaveModelsIntoScene(saveFileDialog1.FileName);
                        if (UVDLPApp.Instance().m_buildparms.exportpreview != PreviewGenerator.ePreview.None)
                        {
                            PreviewGenerator pg = new PreviewGenerator();
                            pg.ViewAngle = UVDLPApp.Instance().m_buildparms.exportpreview;
                            Bitmap preview = pg.GeneratePreview(512, 512);
                            SceneFile.Instance().AddPreviewImage(UVDLPApp.Instance().SceneFileName, preview, "Default", "ScenePreview.png");
                        }
                        UVDLPApp.Instance().RaiseAppEvent(eAppEvent.eSceneSaved, "cws");
                        break;

                    case 2:
                        //stl file
                        UVDLPApp.Instance().CalcScene();     // calc the scene object
                        UVDLPApp.Instance().Scene.SaveSTL_Binary(saveFileDialog1.FileName);
                        UVDLPApp.Instance().Scene.m_fullname = saveFileDialog1.FileName;
                        UVDLPApp.Instance().RaiseAppEvent(eAppEvent.eSceneSaved, "stl");
                        break;
                    }
                }
            }
        }
예제 #13
0
    protected void OnEnable()
    {
        if (_previewGenerator == null)
        {
            _previewGenerator = new PreviewGenerator();
        }

        _previewGenerator.Initialize();

        string path = Path.GetDirectoryName(Application.dataPath) + _settingsPath;

        if (File.Exists(path))
        {
            string settings = File.ReadAllText(path);
            if (settings != null)
            {
                // Then we apply them to this window
                EditorJsonUtility.FromJsonOverwrite(settings, _previewGenerator);
            }

            _previewGenerator.bRepaintNeeded = true;
        }
    }
        public void GeneratePreviewHtmlFromTemplate_Valid_ReplacesTexts(GeneratorRequest request, PreviewGenerator sut)
        {
            // Arrange

            // Act
            var output = sut.GeneratePreviewHtmlFromTemplate(request);

            // Assert
            Assert.Contains($"{request.ImagesFolderName}/", output);
            Assert.Contains($"{request.OverlapPx}", output);
            Assert.Contains($"{request.TileSizePx}", output);
            Assert.Contains($"{request.ImageWidth}", output);
            Assert.Contains($"{request.ImageHeight}", output);
        }
예제 #15
0
    // this happens when clicked off component or OnDisable/OnEnable with prefab reverts
    void OnEnable()
    {
        PreviewGenerator previewGenerator = ((PreviewGeneratorComponent)serializedObject.targetObject).PreviewGenerator;

        previewGenerator.bRepaintNeeded = true;
    }
예제 #16
0
    public override bool RequiresConstantRepaint()
    {
        PreviewGenerator previewGenerator = ((PreviewGeneratorComponent)serializedObject.targetObject).PreviewGenerator;

        return(previewGenerator.bRepaintNeeded);
    }
예제 #17
0
 public MapGenerator(IEnumerable <IMapProcessor> processors)
 {
     Processors       = processors;
     PreviewGenerator = new PreviewGenerator();
     NewMap();
 }
예제 #18
0
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        PreviewGenerator previewGenerator =
            (PreviewGenerator)fieldInfo.GetValue(property.serializedObject.targetObject);

        // need to updated values with Serialization for Undo and Changes
        SerializedProperty PanOffsetProperty     = property.FindPropertyRelative("PanOffset");
        SerializedProperty ZoomLevelProperty     = property.FindPropertyRelative("ZoomLevel");
        SerializedProperty ViewDirectionProperty = property.FindPropertyRelative("ViewDirection");
        SerializedProperty ViewRightProperty     = property.FindPropertyRelative("ViewRightDirection");
        SerializedProperty ViewUpProperty        = property.FindPropertyRelative("ViewUpDirection");
        SerializedProperty RenderWidthProperty   = property.FindPropertyRelative("RenderWidth");
        SerializedProperty RenderHeightProperty  = property.FindPropertyRelative("RenderHeight");

        mouseOverTexture = texRect.Contains(Event.current.mousePosition);
        if (mouseOverTexture && (Event.current.type == EventType.MouseDrag))
        {
            // do pan if the control key is pressed
            if (Event.current.control)
            {
                Vector2 panOffset = PanOffsetProperty.vector2Value;
                panOffset.x += Event.current.delta.x * panSpeed;
                panOffset.y += Event.current.delta.y * panSpeed;
                PanOffsetProperty.vector2Value = panOffset;
            }
            else if (Event.current.shift)
            {
                float newZoom = previewGenerator.ZoomLevel - Event.current.delta.y * zoomSpeed;

                if (previewGenerator.OrthographicCamera)
                {
                    newZoom = Mathf.Min(.999999f, newZoom);
                }

                ZoomLevelProperty.floatValue = newZoom;
            }
            else
            {
                Vector3 viewDirection = ViewDirectionProperty.vector3Value;
                viewDirection += ViewRightProperty.vector3Value * (-Event.current.delta.x * rotSpeed * Mathf.Deg2Rad) +
                                 ViewUpProperty.vector3Value * (-Event.current.delta.y * rotSpeed * Mathf.Deg2Rad);

                viewDirection.Normalize();
                ViewRightProperty.vector3Value = Vector3.Cross(ViewUpProperty.vector3Value, viewDirection).normalized;
                // and new up Vector
                ViewUpProperty.vector3Value        = Vector3.Cross(viewDirection, ViewRightProperty.vector3Value).normalized;
                ViewDirectionProperty.vector3Value = viewDirection;
            }

            if ((previewGenerator != null) && (previewGenerator.GameObjectToRender != null))
            {
                // allows high frame rate in inspector
                previewGenerator.bRepaintNeeded = true;
            }

            return;
        }

        if ((Event.current.type == EventType.ValidateCommand) &&
            (Event.current.commandName == "UndoRedoPerformed"))
        {
            if ((previewGenerator != null) && (previewGenerator.GameObjectToRender != null))
            {
                previewGenerator.bRepaintNeeded = true;
            }

            return;
        }

        // should we only do this during layout and paint events?
        EditorGUI.BeginChangeCheck();
        {
            if (property.hasVisibleChildren)
            {
                property.NextVisible(true);
                do
                {
                    EditorGUILayout.PropertyField(property, true);
                } while (property.NextVisible(false));
            }
        }
        if (EditorGUI.EndChangeCheck())
        {
            // do these outside the drag, since the user may have added new entries manually
            ViewDirectionProperty.vector3Value.Normalize();
            // get new right Vector
            ViewRightProperty.vector3Value =
                Vector3.Cross(ViewUpProperty.vector3Value.normalized, ViewDirectionProperty.vector3Value);
            // and new up Vector
            ViewUpProperty.vector3Value =
                Vector3.Cross(ViewDirectionProperty.vector3Value, ViewRightProperty.vector3Value.normalized);

            // This can happen when the user is editing the View Direction with keyboard.
            if (ViewUpProperty.vector3Value == Vector3.zero)
            {
                ViewUpProperty.vector3Value = Vector3.up;
            }

            if (previewGenerator.OrthographicCamera)
            {
                ZoomLevelProperty.floatValue = Mathf.Min(.999999f, ZoomLevelProperty.floatValue);
            }

            RenderWidthProperty.intValue  = Mathf.Min(Mathf.Max(RenderWidthProperty.intValue, MinTextureSize), MaxTextureSize);
            RenderHeightProperty.intValue = Mathf.Min(Mathf.Max(RenderHeightProperty.intValue, MinTextureSize), MaxTextureSize);

            previewGenerator.bRepaintNeeded = true;
        }

        if ((previewGenerator != null) && (previewGenerator.GameObjectToRender != null) &&
            (Event.current.type == EventType.Repaint) && previewGenerator.bRepaintNeeded)
        {
            previewGenerator.RenderPreviewTexture();
            previewGenerator.bRepaintNeeded = false;
        }

        Texture2D previewTexture = previewGenerator.PreviewTexture;

        EditorGUILayout.Space();
        if (GUILayout.Button(" Save PNG... ", GUILayout.ExpandWidth(false)))
        {
            string path     = Path.GetDirectoryName(previewGenerator.LastPNGPathName);
            string filename = Path.GetFileName(previewGenerator.LastPNGPathName);
            path = EditorUtility.SaveFilePanel("Save Texture as PNG", path, filename, "png");
            if (path.Length != 0)
            {
                previewGenerator.SavePNG(path);
            }
        }

        EditorGUILayout.Space();
        float boxHeight = Mathf.Min(EditorGUIUtility.currentViewWidth - 36, previewGenerator.RenderHeight);

        GUILayout.Box(previewTexture,
                      GUILayout.Height(boxHeight), GUILayout.Width(EditorGUIUtility.currentViewWidth - 36));
        if (Event.current.type == EventType.Repaint)
        {
            texRect = GUILayoutUtility.GetLastRect();
        }


        EditorGUILayout.Space();
    }