Как преобразовать кисть (например, DrawingBrush) в BitmapSource? - PullRequest
6 голосов
/ 12 августа 2011

У меня есть DrawingBrush с некоторой векторной графикой.Я хочу преобразовать его в BitmapSource в качестве промежуточного шага для получения его в Bitmap.Какой (лучший) способ сделать это?

1 Ответ

10 голосов
/ 12 августа 2011
public static BitmapSource BitmapSourceFromBrush(Brush drawingBrush, int size = 32, int dpi = 96)
{
    // RenderTargetBitmap = builds a bitmap rendering of a visual
    var pixelFormat = PixelFormats.Pbgra32;
    RenderTargetBitmap rtb = new RenderTargetBitmap(size, size, dpi, dpi, pixelFormat);

    // Drawing visual allows us to compose graphic drawing parts into a visual to render
    var drawingVisual = new DrawingVisual();
    using (DrawingContext context = drawingVisual.RenderOpen())
    {
        // Declaring drawing a rectangle using the input brush to fill up the visual
        context.DrawRectangle(drawingBrush, null, new Rect(0, 0, size, size));
    }

    // Actually rendering the bitmap
    rtb.Render(drawingVisual);
    return rtb;
}
...