private BitmapSource RenderPreview(PreviewKind kind)
        {
            bool wasPreviewing = Settings.Default.Preview_AnimationToggle;

            Settings.Default.Preview_AnimationToggle = false;

            BitmapSource bmp;

            switch (kind)
            {
            case PreviewKind.Top:
            {
                bmp = RenderVisual(pre_TopScreen, 96, 96);
                break;
            }

            case PreviewKind.Bottom:
            {
                bmp = RenderVisual(pre_BottomScreen, 96, 96);
                break;
            }

            case PreviewKind.Both:
            {
                var topBmp = RenderVisual(pre_TopScreen, 96, 96);
                var botBmp = RenderVisual(pre_BottomScreen, 96, 96);

                DrawingVisual drawingVisual = new DrawingVisual();
                using (DrawingContext drawingContext = drawingVisual.RenderOpen())
                {
                    var noiseBrush = FindResource("NoiseBackground") as Brush;
                    drawingContext.DrawRectangle(noiseBrush, null, new Rect(0, 0, 412, 480));
                    drawingContext.DrawImage(topBmp, new Rect(0, 0, 412, 240));
                    const int X_OFF = (412 - 320) / 2;
                    drawingContext.DrawImage(botBmp, new Rect(X_OFF, 240, 320, 240));
                }

                var rtbmp = new RenderTargetBitmap(412, 480, 96, 96, PixelFormats.Pbgra32);
                rtbmp.Render(drawingVisual);
                bmp = rtbmp;

                break;
            }

            default:
                return(null);
            }

            Settings.Default.Preview_AnimationToggle = wasPreviewing;
            bmp.Freeze();
            return(bmp);
        }
        private void ExportPreview_Execute(PreviewKind previewKind)
        {
            var svfl = new SaveFileDialog
            {
                Filter = "PNG Image|*.png",
            };

            switch (previewKind)
            {
            case PreviewKind.Top:
                svfl.FileName = "preview_top";
                break;

            case PreviewKind.Bottom:
                svfl.FileName = "preview_bottom";
                break;

            case PreviewKind.Both:
                svfl.FileName = "preview";
                break;
            }
            var dlg = svfl.ShowDialog();

            if (dlg.HasValue && !dlg.Value)
            {
                return;
            }
            var outPath  = svfl.FileName;
            var rendered = RenderPreview(previewKind);

            if (rendered == null)
            {
                return;
            }
            var encoder = new PngBitmapEncoder();

            encoder.Frames.Add(BitmapFrame.Create(rendered));
            using (var fs = File.Open(outPath, FileMode.Create))
                encoder.Save(fs);

            MessageBox.Show(MainResources.Message_PreviewSaved, WINDOW_TITLE, MessageBoxButton.OK, MessageBoxImage.Information);
        }
예제 #3
0
        private BitmapSource RenderPreview(PreviewKind kind)
        {
            bool wasPreviewing = Settings.Default.Preview_AnimationToggle;

            Settings.Default.Preview_AnimationToggle = false;

            BitmapSource bmp;

            switch (kind)
            {
                case PreviewKind.Top:
                {
                    bmp = RenderVisual(pre_TopScreen, 96, 96);
                    break;
                }
                case PreviewKind.Bottom:
                {
                    bmp = RenderVisual(pre_BottomScreen, 96, 96);
                    break;
                }
                case PreviewKind.Both:
                {
                    var topBmp = RenderVisual(pre_TopScreen, 96, 96);
                    var botBmp = RenderVisual(pre_BottomScreen, 96, 96);

                    DrawingVisual drawingVisual = new DrawingVisual();
                    using (DrawingContext drawingContext = drawingVisual.RenderOpen())
                    {
                        var noiseBrush = FindResource("NoiseBackground") as Brush;
                        drawingContext.DrawRectangle(noiseBrush, null, new Rect(0, 0, 412, 480));
                        drawingContext.DrawImage(topBmp, new Rect(0, 0, 412, 240));
                        const int X_OFF = (412 - 320) / 2;
                        drawingContext.DrawImage(botBmp, new Rect(X_OFF, 240, 320, 240));
                    }

                    var rtbmp = new RenderTargetBitmap(412, 480, 96, 96, PixelFormats.Pbgra32);
                    rtbmp.Render(drawingVisual);
                    bmp = rtbmp;

                    break;
                }
                default:
                    return null;
            }

            Settings.Default.Preview_AnimationToggle = wasPreviewing;
            bmp.Freeze();
            return bmp;
        }
예제 #4
0
        private void ExportPreview_Execute(PreviewKind previewKind)
        {
            var svfl = new SaveFileDialog
            {
                Filter = "PNG Image|*.png",
            };
            switch (previewKind)
            {
                case PreviewKind.Top:
                    svfl.FileName = "preview_top";
                    break;
                case PreviewKind.Bottom:
                    svfl.FileName = "preview_bottom";
                    break;
                case PreviewKind.Both:
                    svfl.FileName = "preview";
                    break;
            }
            var dlg = svfl.ShowDialog();
            if (dlg.HasValue && !dlg.Value)
                return;
            var outPath = svfl.FileName;
            var rendered = RenderPreview(previewKind);
            if (rendered == null)
                return;
            var encoder = new PngBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(rendered));
            using (var fs = File.Open(outPath, FileMode.Create))
                encoder.Save(fs);

            MessageBox.Show(MainResources.Message_PreviewSaved, WINDOW_TITLE, MessageBoxButton.OK, MessageBoxImage.Information);
        }