WPF 调整 canvas 的大小在调度程序中不起作用
WPF resizing a canvas doesn't work in dispatcher
我正在尝试使用以下代码但在调度程序中调整 canvas 的大小。它似乎没有用,我错过了什么吗?
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);
}
为了从 Canvas 创建具有缩放尺寸的位图,您不需要调整或缩放 Canvas。
只需从 Canvas 创建一个 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);
我正在尝试使用以下代码但在调度程序中调整 canvas 的大小。它似乎没有用,我错过了什么吗?
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);
}
为了从 Canvas 创建具有缩放尺寸的位图,您不需要调整或缩放 Canvas。
只需从 Canvas 创建一个 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);