SharpDX zeichnen simpler 2D Grafiken

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Maitime.

    SharpDX zeichnen simpler 2D Grafiken

    Hey,
    ich wollte mal fragen ob sich jemand mit SharpDX auskennt da ich da einfach nicht mehr durchblicke.

    Mein Problem ist das ich ein 2D-Array habe und dieses grafisch darstellen will
    Bisher habe ich das mit GDI+ gemacht aber ab einer gewissen Größe des Arrays ist GDI+ zu langsam, also habe ich gegooglet und bin dann auf einige Vergleiche gestoßen und dort wurde SharpDX als "way to go" beschrieben.

    So in ungefähr habe ich das ganze bis jetzt gezeichnet (kein richtiger code)

    VB.NET-Quellcode

    1. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    2. Application.DoEvents()
    3. Dim tollesArray
    4. For i = 0 To 100
    5. For j = 0 To 100
    6. If tollesArray(i, j) = 1 Then
    7. e.Graphics.FillRectangle(Brushes.Red, i * 16, j * 16, 16, 16)
    8. End If
    9. Next
    10. Next
    11. Me.Invalidate()
    12. End Sub


    nach längerer suche hab ich in der SharpDX repo 5 Jahre alte Beispiele gefunden, aber die gehen an das ganze sehr komplex heran.
    github.com/sharpdx/SharpDX-Sam…ct2D1/MiniRect/Program.cs

    Also meine Kernfrage, ist das SharpDX beispiel überhaupt der richtige Weg? Wenn ja auch so komplex wie im Beispiel? Wenn nein, kennt jemand ein Beispiel?


    wiederhergestellt; das Tot-/Umeditieren eines Posts, nachdem es bereits darauf Antworten gegeben hat, ist laut Boardregeln verboten ~VaporiZed

    nachträglich gestellte Zusammenfassung durch Maitime:

    Nachdem meine frage mehrfach falsch verstanden wurde muss ich wohl
    schließen, dass ich sie falsch gestellt habe, also neuer Versuch.

    Meine Frage ist, wie kann ich mit SharpDX simple 2D Formen zeichnen

    Danke für eure Antworten

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“ ()

    @Maitime Wenn das Dein Code ist:
    Streiche die Zeilen

    VB.NET-Quellcode

    1. Application.DoEvents()
    2. ' und
    3. Me.Invalidate()
    ersatzlos, Dann sollte das ganze schon wesentlich flüssiger laufen.
    Dim tollesArray sollte in der Klasse, nicht aber in der Prozedur stehen.
    Es sollte genügen, dieses Array als Boolean zu deklarieren.
    Arbeitest Di mit Strict On :?:
    Visual Studio - Empfohlene Einstellungen

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich nutze Direct2D (mit dem SlimDX Framework), damit funktioniert es ähnlich wie GDI, SharpDX sollte fast gleich funktionieren.
    Das Beispiel bezieht sich nicht nur auf Direct2D.

    z.b.:

    VB.NET-Quellcode

    1. D2D_RenderTarget.DrawRectangle(D2D_BrushWhite, New RectangleF(229, 59, 60, 24), 2)


    Natürlich muss zuerst D2D_RenderTarget erst erstellt werden!

    VB.NET-Quellcode

    1. Dim D2D_Initiated As Boolean = False
    2. Dim D2D_RenderTarget As SlimDX.Direct2D.WindowRenderTarget
    3. Dim D2D_Factory As SlimDX.Direct2D.Factory
    4. Dim D2D_BrushWhite As SlimDX.Direct2D.SolidColorBrush
    5. Private Sub D2d_init()
    6. D2D_Factory = New SlimDX.Direct2D.Factory(SlimDX.Direct2D.FactoryType.Multithreaded)
    7. DWriteFactory = New SlimDX.DirectWrite.Factory
    8. Dim Properties = New SlimDX.Direct2D.WindowRenderTargetProperties With {
    9. .Handle = Me.Handle,
    10. .PixelSize = New Size(555, 470),
    11. .PresentOptions = SlimDX.Direct2D.PresentOptions.Immediately}
    12. D2D_RenderTarget = New SlimDX.Direct2D.WindowRenderTarget(D2D_Factory, Properties)
    13. D2D_RenderTarget.AntialiasMode = SlimDX.Direct2D.AntialiasMode.PerPrimitive
    14. D2D_RenderTarget.TextAntialiasMode = SlimDX.Direct2D.TextAntialiasMode.Aliased
    15. D2D_BrushWhite = New SlimDX.Direct2D.SolidColorBrush(D2D_RenderTarget, New SlimDX.Color4(1, 1, 1, 1))
    16. End Sub
    17. Private Sub Draw()
    18. D2D_RenderTarget.BeginDraw()
    19. D2D_RenderTarget.DrawRectangle(D2D_BrushWhite, New RectangleF(229, 59, 60, 24), 2)
    20. D2D_RenderTarget.EndDraw()
    21. End Sub


    Gruß
    Christian
    @christian_B Hey, danke für deine Antwort. Nachdem ich selbst lange rumprobiert habe, habe ich auch zu SlimDX gewechselt und das ganze geregelt bekommen. Deine Antwort kommt meiner Lösung ziemlich nahe und scheint auch gut zu funktionieren, also falls jemand das selbe Problem hat wie ich sollte er sich an der obigen Antwort von christian_B orientieren.

    Gruß
    K