Я не ожидал
RenderTargetBitmap.Render(visual)
чтобы иметь какие-либо побочные эффекты, вырвать изменения самих растровых данных. Похоже, это неправда. Я не могу повторить его более 60 раз, прежде чем начнутся некоторые уродливые артефакты рендеринга.
Как правильно визуализировать много спрайтов в WPF? Ниже приведен код для воспроизведения проблемы.
Я генерирую спрайты следующим образом:
BitmapSource Sprite()
{
var bitmap = new RenderTargetBitmap(
500, 500,
96, 96,
PixelFormats.Default);
var visual = new DrawingVisual();
var rect = new Rect(
new Size(
bitmap.Width,
bitmap.Height));
using (DrawingContext context = visual.RenderOpen())
context.DrawLine(
new Pen(Brushes.Red, 100),
rect.TopLeft,
rect.BottomRight);
bitmap.Render(visual);
bitmap.Freeze();
return bitmap;
}
Вот, например, холст для рендеринга многих из них:
public BitmapSource Canvas
{
get
{
var bitmap = new RenderTargetBitmap(
1980, 1080,
96, 96,
PixelFormats.Default);
var tiles = 70;
for (int i = 0; i < tiles; i++)
{
var visual = new DrawingVisual();
var rect = new Rect(
bitmap.Width / tiles * i,
0,
bitmap.Width / tiles,
bitmap.Height);
using (DrawingContext context = visual.RenderOpen())
context.DrawImage(Sprite(), rect);
bitmap.Render(visual);
}
bitmap.Freeze();
return bitmap;
}
}
Я вижу это странное изображение, будучи привязанным к свойству Canvas...