Grafisches Problem - WinForms zu WPF

  • WPF MVVM
  • .NET (FX) 4.5–4.8

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von BitBrösel.

    @BitBrösel

    Na das ist doch schon mal was. OnRender und DrawingContext kannte ich jetzt noch nicht....

    Ich werd mich morgen auch mal an das Cropped Bitmap ranmachen, das klingt doch ganz vielversprechend.

    Das Bewegen und skalieren findest du ja schon in meinem Beispielprojekt, siehe die Variable Zoom und den Eventhandler vom Timertick... Da musst du wahrscheinlich aber noch die Einheiten in Pixel umrechnen damit das dann tadellos funktioniert... Weil Breite und Hoehe sind ja in Einheiten, und die Bass.dll will ja Pixels...

    Also: Mal gucken wer schneller ist :)

    PS: Zum testen empfehle ich dir eine Mp3 zu nehmen mit einem eindeutigen Intro und Zoom auf 10 oder so zu setzen, damit du genau überprüfen kannst "wo der Beat anfängt" bzw. ob es synchron läuft...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kafffee“ ()

    Naja, das mit den Pixeln müsste ich bei meiner Variante nicht direkt. Deshalb ja %, 100 / TrackLength * TrackPosition, der Property MarkerPercentage geben und alles ist im Control geregelt. Brauche keine Width oder Height sonst wo, nur im OnRender des Controls. Klar hab ich so nicht die Größe des Controls um eine passgenaue Bitmap zu erstellen(im Fall von MVVM), das ließe sich aber auch über Umwege machen, aber muss glaub ich nicht sein, bisschen Skalieren wird keinem auffallen.(Zumindest nicht bei der WaveForm)

    PS.
    Ja das mit dem CroppedImage scheint bei mir nötig zu sein, denn DrawImage hat keine Überladung wo man ein Source-Rect und ein Destination-Rect angeben kann.(Wie es in Forms ist)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BitBrösel“ ()

    Neu

    @BitBrösel

    Also bei mir gehts tatsächlich so wie ich es schon habe. Einfach das Image auf dem Canvas verschieben. Hatte bloss im CreateBitmap -Call vergessen die Breite noch mit dem Zoomfaktor zu multiplizieren...

    Was mir grad mehr Sorgen bereitet ist das Finetuning. Denn wenn ich jetzt die ganzen Farben, Mono/Stereo, DrawBeat einstellen möchte, kommt bei mir nur noch ein schwarzes Bild raus, aber da guck ich mir jetzt gleich mal die Docs von radio42 an...

    VB.NET-Quellcode

    1. Private Sub InitialisiereWaveForm
    2. MeineWellenForm.ColorLeft = System.Drawing.Color.Aquamarine
    3. MeineWellenForm.ColorLeftEnvelope = System.Drawing.Color.Red
    4. MeineWellenForm.ColorMiddleLeft = System.Drawing.Color.Aquamarine
    5. MeineWellenForm.ColorRight = System.Drawing.Color.Aquamarine
    6. MeineWellenForm.DrawCenterLine = True
    7. MeineWellenForm.DrawEnvelope = False
    8. MeineWellenForm.DetectBeats = True
    9. MeineWellenForm.BeatLength = 1.0
    10. MeineWellenForm.BeatWidth = 1
    11. MeineWellenForm.DrawBeat = WaveForm.BEATDRAWTYPE.TopBottom
    12. MeineWellenForm.ColorBeat = System.Drawing.Color.Yellow
    13. MeineWellenForm.DrawMarker = WaveForm.MARKERDRAWTYPE.Line Or WaveForm.MARKERDRAWTYPE.Name Or WaveForm.MARKERDRAWTYPE.NamePositionMiddle
    14. MeineWellenForm.DrawWaveForm = WaveForm.WAVEFORMDRAWTYPE.Stereo
    15. End Sub


    Edit: OK also auf den ersten Blick auch nix gefunden...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kafffee“ ()

    Neu

    @kafffee

    Ich bin gerade an ganz anderer Stelle unterwegs. Ich hab die BassNet zerpflückt und selbst kompiliert, so das ich einen WaveForm-Konstruktor(mit Callback-Argument) ohne Forms.Control habe. In WinForms wird das Bild schon gezeigt bevor es ganz fertig ist(wird stück für Stück geupdated), daher finde ich das mit dem Callback so gut, in WPF müssen wir warten bis ganz gerendert wurde. Ich muss aber noch ein Problem lösen, wenn ich das zum Teil gerenderte Bild der Property zuweisen will knallt es.(Das Object wird bereits an andere Stelle verwendet), passiert auch wenn ich versuche die Bitmap zu klonen. Ich habe da schon einige Ideen, mal schauen wie ich versuche es anzugehen.

    Jetzt mach ich erst mal am CustomControl weiter, das gefällt mir besser als mit dem Canvas. So ist alles nötige im CustomContol, finde ich sauberer.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BitBrösel“ ()

    Neu

    Gibt da ein magisches Werkzeug für NET-Kompilate, nennt sich IlSpy :D Damit kannst du aus NET-DLLs/-EXEs wieder den Source herstellen(nicht 1:1), man kann das auch als VS-Projekt speichern, diese Projekte sind aber nicht immer ohne weiteres Lauffähig, hin und wieder muss man noch Hand anlegen, aber die aktuelle Version von IlSpy hat das gut mit der BassNet hinbekommen, war nicht mehr viel zu machen.

    github.com/icsharpcode/ILSpy

    Gibt es auch schon fertig kompiliert im MS-Store als Desktop-App.