Я хочу создать своего рода симуляцию. Будут многочисленные спрайты, плавающие вокруг. Поскольку я думаю, что рендеринг каждого кадра в тысячу раз те же примитивы, которые составляют спрайт, будет медленным, я хочу сделать их один раз в растровое изображение, а затем показать этот спрайт в каждом кадре.WPF: Растровое изображение не отображается
Но, похоже, он не работает, экран остается белым.
источник My WPF тривиальна:
<Window x:Class="WPFGraphicsTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="800" Width="1000">
<Canvas>
</Canvas>
</Window>
И это мой код:
public partial class MainWindow : Window
{
Ellipse e;
RenderTargetBitmap bmp2;
public MainWindow()
{
InitializeComponent();
e = new Ellipse();
e.Width = 40;
e.Height = 40;
e.Fill = new SolidColorBrush(Color.FromRgb(0, 0, 200));
((Canvas)this.Content).Children.Add(e);
((Canvas)this.Content).Measure(new Size(1000, 800));
((Canvas)this.Content).Arrange(new Rect(new Size(1000, 800)));
RenderTargetBitmap bmp2 = new RenderTargetBitmap(40, 40, 96, 96, PixelFormats.Pbgra32);
bmp2.Render(e);
((Canvas)this.Content).Children.Remove(e);
}
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
drawingContext.DrawImage(bmp2, new Rect(100,100, 40, 40));
}
}
Почему это не работает?
Спасибо за ответ, но ваш код отображает эллипс в каждом кадре. Я хочу, чтобы эллипс отображался один раз в растровое изображение, а затем каждый кадр рисовал только растровое изображение. – codymanix
@codymanix, используя этот пример, вы можете получить растровое изображение для рендеринга. В основном код в _timer_Tick - это то, что вам нужно сделать для растрового изображения. Если вы хотите сделать это только один раз, вы можете перенести этот код из функции _timer_Tick. Я просто включил это в образец, чтобы вы могли видеть, что обновление к растровому изображению отображается на экране. –
ОК спасибо, что сработает. Но это означает, что я должен создать объект Image для каждого спрайта, который я хочу рисовать. Разве нельзя рисовать изображения на лету? Что случилось с моим кодом, разве он не должен работать? – codymanix