Gibt es eine andere Möglichkeit zum Rendern von Grafiken in C# über GDI+ und XNA?
(Für die Entwicklung einer tile-map-editor.)
- David, nur bemerkt, dass Ihre Frage "Verständnis-Zeiger". Tolle Frage, tolle Antworten! Alle Punkte erwähnt, dass die post auch für meine "unsicheren" Antwort unten.
SDL.NET ist die Lösung, die ich gekommen bin, zu lieben. Wenn Sie brauchen, 3D oben drauf, die Sie verwenden können, Tao.OpenGL zum Rendern drin. Es ist schnell, Industrie-standard - ( SDL , das ist), und cross-Plattform.
Ja, ich habe geschrieben eine Windows-Forms-Steuerelement umschließt, die DirectX 9.0 und bietet eine direkte pixel-Ebene-manipulation der video-Oberfläche.
Ich tatsächlich schrieb ein post auf Stack Overflow zu Fragen, ob es andere, bessere Ansätze: Unsafe C# und Hinweise für 2D-rendering, gut oder schlecht?
Es ist zwar relativ hoher Leistung, es erfordert die unsichere compiler-option, wie es verwendet Zeiger zum Zugriff auf den Speicher effizient. Daher auch der Grund für diesen früheren Beitrag.
Dies ist eine hohe Ebene der notwendigen Schritte:
Microsoft DirectX assembly.
(Fenster -, Rücken-Pufferung, etc.) Sie bedürfen.
aktuelle display-Modus (bits pro pixel).
Lock
den backbufferOberfläche und speichern den zurückgegebenen Zeiger auf den start der Oberfläche
Speicher.
Daten basierend auf der Oberfläche pitch,
bits pro pixel und die aktuellen x/y-pixel-Koordinate.
Unlock
back-buffer Oberfläche. Präsentieren die Oberfläche.Sich bewusst sein, dass unter diesem Ansatz müssen Sie sehr vorsichtig sein, über die überprüfung der aktuellen display-Modus (pitch und bits pro pxiel) von der target-Oberfläche. Auch Sie müssen eine Strategie für den Umgang mit der änderung der Fenstergröße anpassen oder änderungen der Bildschirm-format, während das Programm ausgeführt wird.
Managed DirectX (Microsoft.DirectX-namespace) für schnellere 3D-Grafiken. Es ist eine solide .NET wrapper über DirectX-API, die kommt mit ein wenig performance-Treffer für zu erstellen .NET-Objekte und-marshalling. Es sei denn, Sie schreiben eine voll ausgestattete moderne 3D-engine, es wird funktionieren.
Window Presentation Foundation (WPF) - (Windows.Media-namespace) - beste Wahl für 2D-Grafiken. Auch begrenzte 3D-Fähigkeiten. Erwischt zu ersetzen, die Windows Forms-mit Vektor -, hardware-beschleunigte Auflösung-unabhängiges framework. Sehr bequem, unterstützt mehrere Aromen von benutzerdefinierten Steuerelementen, Ressourcen, data binding, Ereignisse und Befehle... hat auch ein paar WTFs. Geschwindigkeit ist in der Regel schneller als GDI und langsamer als DirectX, und hängt stark davon ab, wie Sie Dinge tun (etwas gesehen zu Arbeit 60 mal schneller nach umschreiben in eine vernünftige Art und Weise). Wir hatten einen Erfolg Umsetzung 3 1280x1024 Bildschirme voller Echtzeit-Indikatoren, Diagramme und Diagramme auf einen einzelnen (und nicht die besten) PC.
Könnten Sie versuchen, suchen in WPF mit Visual Studio und/oder Expression Blend. Ich bin mir nicht sicher, wie raffiniert die Sie versuchen zu bekommen, aber es sollte in der Lage sein zu handhaben, ein einfacher editor. Überprüfen Sie heraus dieses MSDN-Artikel für mehr info.
Vielleicht schauen Sie in der Cairo Grafik-Bibliothek. Die Mono Projekt hat bindings für C#.
Kairo ist eine option. Ich bin gerade umschreiben meine mapping-software mit GDI+ und Kairo. Es hat eine tile-map-generator, unter anderem features.