有没有办法为DrawingContext获取WriteableBitmap(或类似的东西)?即可以让您调用简单的DrawLine / DrawRectangle / etc类型的方法,而不是直接操作原始像素的方法。

最佳答案

我发现sixlettervariables解决方案是最可行的。但是,缺少“drawingContext.Close()”。根据MSDN,“必须先关闭DrawingContext,然后才能呈现其内容”。
结果是以下实用程序功能:

public static BitmapSource CreateBitmap(
    int width, int height, double dpi, Action<DrawingContext> render)
{
    DrawingVisual drawingVisual = new DrawingVisual();
    using (DrawingContext drawingContext = drawingVisual.RenderOpen())
    {
        render(drawingContext);
    }
    RenderTargetBitmap bitmap = new RenderTargetBitmap(
        width, height, dpi, dpi, PixelFormats.Default);
    bitmap.Render(drawingVisual);

    return bitmap;
}

然后可以像这样轻松使用:
BitmapSource image = ImageTools.CreateBitmap(
    320, 240, 96,
    drawingContext =>
    {
        drawingContext.DrawRectangle(
            Brushes.Green, null, new Rect(50, 50, 200, 100));
        drawingContext.DrawLine(
            new Pen(Brushes.White, 2), new Point(0, 0), new Point(320, 240));
    });

关于wpf - 为wpf WriteableBitmap获取DrawingContext,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/88488/

10-09 13:17