示例#1
0
        /// <summary>
        /// Refreshes the final pixel render size which will be used by all the rendering methods
        /// </summary>
        /// <param name="invalidateFastImage">Creates a new FastImage and disposes the old one</param>
        private void RefreshRenderSize(bool invalidateFastImage = false)
        {
            if (!IsLoaded)
            {
                return;
            }

            var refreshThread = new Thread(() =>
            {
                // suppress rendering actions while the windows is changed
                MandelFrame.CancelToken.Cancel();
                lock (MandelFrame.RenderLock)
                {
                    MandelFrame.ResetToken();

                    // check best aspect ratio
                    double newWidth, newHeight;
                    if ((int)MandelBrotGrid.ActualWidth <= (int)MandelBrotGrid.ActualHeight)
                    {
                        // width is smaller
                        newWidth  = MandelBrotGrid.ActualWidth;
                        newHeight = newWidth * ZoomSelectionHandler.GausRatioXy;
                    }
                    else
                    {
                        // height is smaller
                        newHeight = MandelBrotGrid.ActualHeight;
                        newWidth  = newHeight * ZoomSelectionHandler.GausRatioYx;
                    }

                    RenderSizeRef.ChangeDisplaySize(newWidth, newHeight);

                    InvokeOnMainWindow(() =>
                    {
                        // set wpf control size
                        MandelBrotImage.Width         = RenderSizeRef.DisplayWidth;
                        MandelBrotImage.Height        = RenderSizeRef.DisplayHeight;
                        MandelBrotImagePreview.Width  = RenderSizeRef.DisplayWidth;
                        MandelBrotImagePreview.Height = RenderSizeRef.DisplayHeight;
                        MandelBrotCanvas.Width        = RenderSizeRef.DisplayWidth;
                        MandelBrotCanvas.Height       = RenderSizeRef.DisplayHeight;

                        UpdateLayout();
                    });

                    if (invalidateFastImage)
                    {
                        InvokeOnMainWindow(() =>
                        {
                            // grab a new fast image
                            FastImageRef?.Dispose();
                            FastImageRef = new FastImage(MandelBrotImage, RenderSizeRef.RenderWidth,
                                                         RenderSizeRef.RenderHeight);

                            FastImagePreviewRef?.Dispose();
                            FastImagePreviewRef = new FastImage(MandelBrotImagePreview, RenderSizeRef.PreviewWidth,
                                                                RenderSizeRef.PreviewHeight);
                        });

                        // re-render
                        CurrentFrame?.RenderAsync();
                    }
                }
            });

            refreshThread.Name = "RefreshThread";
            refreshThread.Start();
        }