Je cherche un moyen d'améliorer la performance de certains dessins que je fais. Actuellement, il s'agit d'une grille de carreaux 32x32 que je dessine. Utilisation du code suivant pour dessiner sur le contexte de dessinAméliorer les performances du dessin Bitmaps en mosaïque dans wpf
for (int x = startX; x < endX; x++)
{
for (int y = startY; y < endY; y++)
{
dg.Children.Add(
new ImageDrawing(_mapTiles[GameWorldObject.GameMap[x, y].GraphicsTile.TileStartPoint],
new Rect(CountX * 8, CountY * 8, 8, 8)
));
dg.Children.Add(
new GeometryDrawing(
null,
new Pen(
new SolidColorBrush(
Color.FromRgb(255, 0, 20)), .3),
new RectangleGeometry(
new Rect(CountX * 8, CountY * 8, 8, 8)
)
)
);
CountY++;
}
CountY = 0;
CountX++;
}
dc.DrawDrawing(dg);
L'image que je dessine est un CachedBitmap. Même en utilisant un CachedBitmap, j'ai toujours un délai d'environ une demi-seconde chaque fois que j'ai besoin de redessiner le Canvas.
Vous ne savez pas s'il existe un moyen plus performant de gérer le dessin sur cette grille. Finalement, je veux étendre le contrôle pour fonctionner comme une mini-carte, donc je dois garder cela à l'esprit.
En outre, j'ai essayé précédemment de dessiner chaque bitmap directement dans le contexte de dessin, mais cela semble un peu plus lent.
Pour une grille 32x32, j'ai trouvé que votre méthode était rapide, je peux poster une solution en utilisant un WriteableBitmap qui fonctionne bien pour les petites tuiles comme les carrés de 8px dans le code que vous avez posté. Le code de 'GameWorldObject.GameMap [x, y] .GraphicsTile.TileStartPoint' est-il un simple accès? et est-ce une grille de 32x32 avec des tuiles de taille 8px qui fonctionne lentement? – Kris
_maptiles est un dictionnaire qui contient tous les bitmaps possibles. C'est une grille de 32x32 que je rétrécis de sa taille d'origine. Les carreaux sont en réalité 64x64. Je me demande s'il serait plus rapide de réduire une seule image après sa construction plutôt que chaque image –