2009-09-29 6 views
4

Donc actuellement, je crée un bitmap 1000x1000 et il passe environ 0,3 secondes en appelant simplement la fonction Bitmap.SetPixel().Bitmap.SetPixel (x, y, Color) trop lent

En fait, je dessine probablement 50% des pixels, donc c'est plus comme 500 000 appels à setpixel. Bien que cela ressemble à beaucoup d'appels, les jeux vidéo OTOH font beaucoup plus et poussent beaucoup plus de pixels (certains d'entre eux générés procédureally).

De toute évidence Bitmap.SetPixel n'est pas optimisé pour la vitesse, mais si j'avais besoin de mettre à jour un bitmap 20-30 fois par seconde pour obtenir une animation décente, c'est beaucoup ralentir, alors quelles sont mes options?

+0

Je voudrais utiliser votre propre tampon, puis "blit" au Bitmap. Désolé, je ne connais pas vraiment la solution de code moi-même, mais je ne serais pas SetPixel sur chaque pixel, j'écrirais sur mon propre tampon (ou j'aurais accès à son buffer) –

Répondre

6

Bob Powell a un excellent tutorial sur l'accès aux cartes de pixels directement dans la mémoire.

+0

Merci, c'est exactement ce que je cherchais. –

+0

Cela m'a aidé aussi. La clé utilise Bitmap.LockBits, Bitmap.UnlockBits. –

+0

Ce lien est le malware non recommandé et les sites de SPAM! – sergiol

1

jeux vidéo blockbuster modernes font tous les réglages de pixels dans les coulisses de matériel; ils donnent au matériel un tampon de géométries et le matériel fortement parallélisé fait tout le calcul. OpenGL et DirectX sont des API pour parler au matériel.

Recherchez gamedev.net pour certains didacticiels.

1

Je recommande FastBitmap:

FastBitmap fb = new FastBitmap(b); 
fb.LockImage(); 

... 

fb.SetPixel(x, y, Color.Red); 

... 

fb.UnlockImage(); 
Questions connexes