WPF: быстрое рисование / масштабирование сложного изображения - PullRequest
2 голосов
/ 03 мая 2011

Я рисую сложное изображение, состоящее из сотен объектов GeometryDrawing. Рисование происходит довольно быстро, но масштабирование происходит медленно. Я могу представить, что перерисовка сотен объектов занимает некоторое время. В качестве решения я хочу превратить свой рисунок в растровое изображение.

Я пробовал следующее, но это не работает. Полученное изображение пустое.

private Image CreateBitmapImage(DrawingImage drawingImage)
{
    var image = new Image()
    image.Source = drawingImage;
    var bitmap = new RenderTargetBitmap(300, 300, 96, 96, PixelFormats.Pbgra32);
    bitmap.Render(image);
    image.Source = bitmap;
    return image;
}

Как я могу превратить DrawingImage в растровое изображение?

1 Ответ

1 голос
/ 03 мая 2011

Если вы используете RenderTargetBitmap со вновь созданными элементами, вам нужно обязательно вызывать Measure and Arrange.

private Image CreateBitmapImage(DrawingImage drawingImage)
{
    var image = new Image();
    image.Source = drawingImage;
    var bitmap = new RenderTargetBitmap(300, 300, 96, 96, PixelFormats.Pbgra32);
    var size = new Size(bitmap.PixelWidth,bitmap.PixelHeight);
    image.Measure(size);
    image.Arrange(new Rect(size));
    bitmap.Render(image);
    image.Source = bitmap;
    return image;
}

Возможно, вы захотите передать размер в качестве параметра, и может быть лучше вернуть RenderTargetBitmap вместо элемента Image, чтобы вы могли использовать его в нескольких местах.

В WPF есть некоторые функции, которые вы, возможно, захотите изучить, такие как Freezables , BitmapCache и CachingHint для TileBrushes, однако RenderTargetBitmap все еще является хорошим выбором, так как предсказуемо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...