Je veux créer un simple moteur de rendu vidéo pour jouer, et faire des choses comme créer ce qui serait un système d'exploitation mobile juste pour le plaisir. Mon père m'a dit que dans les tout premiers ordinateurs, vous éditiez une adresse de mémoire spécifique et l'écran se mettait à jour. Je voudrais simuler cela dans une fenêtre de Windows. Est-ce que je peux faire ça avec C#?Comment puis-je modifier des pixels individuels dans une fenêtre?
Répondre
Il est un sujet complet qui est en dehors de la portée (elle ne convient pas, pas que je ne divaguer pendant des heures :-) de ce answer..but cela devrait vous aider à démarrer avec le dessin en C#
http://www.geekpedia.com/tutorial50_Drawing-with-Csharp.html
les choses ont un peu des vieux jours de la mémoire directe manipulation..although tout est toujours lié aux pixels.
Editer: Oh, et si vous rencontrez des problèmes de scintillement et que vous êtes bloqué, envoyez-moi une ligne et je vous enverrai un panneau DoubleBuffered pour peindre.
Ceci était fait parce que vous pouviez avoir un accès direct au tampon vidéo. Ceci n'est généralement pas disponible avec les systèmes actuels, car la mémoire vidéo est gérée par le pilote vidéo et le système d'exploitation. De plus, il n'y a vraiment pas de mappage 1: 1 du tampon de mémoire vidéo et ce qui est affiché plus. Avec autant de mémoire disponible, il est devenu possible d'avoir plusieurs tampons et de basculer entre eux. Le tampon actuellement affiché est appelé "tampon avant" et les autres tampons non affichés sont appelés "tampons arrière" (pour plus d'informations, voir http://en.wikipedia.org/wiki/Multiple_buffering). Nous écrivons généralement à des tampons arrières et ensuite le système vidéo met à jour le tampon avant pour nous. Cela fournit des mises à jour régulières, car le pilote vidéo synchronise la mise à jour avec la fréquence de balayage du moniteur.
Pour écrire en arrière tampons en utilisant C#, ma technique préférée est d'utiliser le WPF WritableBitmap. J'ai également utilisé le System.Drawing.Bitmap
pour mettre à jour l'écran en y écrivant des pixels via LockBits.
Bien que je sois sûr que c'est une meilleure solution, je ne comprends pas complètement le code et me connaissant, je gâcherais beaucoup de temps avec du code non managé: D –
@Daniel - ce n'est pas un code non géré ... dangereux, bien sûr, mais il n'y a pas vraiment d'autre moyen de le faire rapidement. Vous pouvez utiliser GetPixel/SetPixel, mais vous ne pouvez pas avoir rapide. ;) – codekaizen
- 1. affichage des pixels individuels dans WPF
- 2. Dessiner des pixels individuels avec iphone sdk
- 3. Comment modifier des champs individuels dans ASP.NET MVC?
- 4. iPhone. Comment changer les pixels individuels de big CGImage inplace?
- 5. Définir des pixels individuels sur le tampon arrière
- 6. modifier les pixels d'un CGImageRef
- 7. Utilisation du contenu d'un tableau pour définir des pixels individuels dans un contexte de bitmap Quartz
- 8. Le moyen le plus efficace pour dessiner des pixels individuels dans OpenGL ES (Cocos2d-iphone)
- 9. Comment découper ou modifier l'alpha d'une image (pixels) dans Quartz?
- 10. comment itérer des caractères individuels dans une chaîne Lua?
- 11. Comment extraire des sprites individuels de la grille des sprites?
- 12. imprimer des tableaux individuels?
- 13. Désactiver des boutons individuels dans une barre de boutons
- 14. Taille des dossiers individuels dans svn
- 15. Modifier des boutons radio individuels dans le script de vue zendform
- 16. Modifier les pixels à remplir avec une couleur dans une image WPF
- 17. Comment souligner des éléments individuels dans un CListCtrl
- 18. comment ajouter des éléments individuels dans un tableau
- 19. Comment afficher des champs individuels dans un bloc personnalisé? A
- 20. Comment utiliser Jquery pour adresser des messages individuels dans Wordpress
- 21. Calcul des pixels correspondants
- 22. Stocker des pixels dans un tableau d'octets
- 23. UIImage Rotation des pixels
- 24. wpf listbox modifier les éléments individuels en gras
- 25. Comment modifier l'aspect d'une fenêtre inactive dans XAML?
- 26. Utiliser PHP imagecreatefromgif() pour modifier les 150 pixels d'une image gif 760x1 pixels
- 27. Comment lire les pixels de texture direct3d
- 28. Comment convertir des twips en pixels dans .NET?
- 29. SSRS - utilise une valeur de ligne pour des champs individuels
- 30. Comment une fenêtre de navigateur enfant peut-elle modifier les propriétés de la fenêtre?
Dans WinForms> v2.0, la double mise en mémoire tampon peut être activée avec le paramètre de la propriété DoubleBuffered: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.doublebuffered. aspx. – codekaizen
Mais pas sur un panneau ou un contrôle géré: -D Allez-y et essayez-le .. il ignore activement votre tentative parce que la propriété DoubleBuffered est une valeur protégée. – Caladain
Droite. Je suppose que j'ai oublié car il est si facile de simplement sous-classer le panneau et de définir cette propriété dans le constructeur. En tout cas, DoubleBuffered est juste un raccourci pour définir le style de contrôle à ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, donc alternativement vous pouvez simplement appeler SetStyle() avec cette valeur. – codekaizen