WPF не изменяет размеры холста в диспетчере - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь изменить размер холста, используя следующий код, но в диспетчере. Кажется, это не работает, я что-то упустил?

                    Dispatcher.BeginInvoke(new Action(() => {
                        canvas.RenderTransform = new ScaleTransform(scale, 
scale);
                        canvas.Measure(new Size(scale * w, scale * h));
                        canvas.Arrange(new Rect(0, 0, scale * w, scale * 
h));
                        canvas.UpdateLayout();

                        RenderTargetBitmap rtb = new RenderTargetBitmap(scale * w, scale * h, 96, 96, PixelFormats.Pbgra32);
                        rtb.Render(canvas);
                }), DispatcherPriority.Send);

            }

1 Ответ

0 голосов
/ 10 сентября 2018

Чтобы создать растровое изображение из холста с масштабированным размером, вам не нужно изменять размер или масштабировать холст.

Просто создайте VisualBrush из холста и нарисуйте прямоугольник соответствующего размера с ним вDrawingVisual.Использование DrawingVisual также позволяет избежать возможных проблем с полями и выравниванием.

var width = canvas.ActualWidth * scale;
var height = canvas.ActualHeight * scale;
var visual = new DrawingVisual();

using (var dc = visual.RenderOpen())
{
    dc.DrawRectangle(new VisualBrush(canvas), null, new Rect(0, 0, width, height));
}

var rtb = new RenderTargetBitmap((int)width, (int)height, 96, 96, PixelFormats.Default);
rtb.Render(visual);
...