Lorsque je crée un éditeur de mappage en C#, j'ai tendance à parcourir les axes X et Y et à appeler Graphics.DrawImage() pour mettre en place une seule mosaïque, à partir d'un bitmap sur une carte Bitmap. Ce processus prend plusieurs secondes à compléter, donc je ne le fais qu'une seule fois lors du chargement d'une nouvelle carte ou de la modification de son ensemble de pièces. Toutes les modifications à partir de là sont des blits relativement rapides de seulement la tuile éditée. Maintenant, je me suis assis plus tôt aujourd'hui et j'ai réfléchi à mes options. Graphics.DrawImage() est le seul des trois (les autres étant DrawImageUnscaled et DrawImageUnscaledAndCropped (?)) Qui permet la spécification d'une origine source. DrawImageUnscaled() était beaucoup, beaucoup plus vite, mais toujours blitted à partir du coin supérieur gauche de la bitmap source.Est-ce que ce blitter de tuiles pourrait devenir plus rapide?
En contraste frappant avec les vitesses de QuickBasic PSET par rapport POKEing la mémoire vidéo ou PSet de VB6 par rapport à setPixel de WinAPI, simple boucle Get/de SetPixel était aussi rapide qu'un appel DrawImageUnscaled, mais a fait la culture qui ne DrawImage serait sinon fais.
C'est assez rapide pour l'instant, mais je me demandais comment quelque chose comme la manipulation d'image directe pourrait l'accélérer encore plus? Quelque chose avec LockBits peut-être, une fonction que je connais à peu près rien?
Ce n'est pas vraiment la réponse à votre question, mais vous pouvez augmenter la vitesse de la DrawImage en définissant le rectangle entier de l'image -> X, Y, Largeur, Hauteur. Dans mon test, j'ai réalisé environ 20% d'accélération. –