Speichereffizientes SetPixel

  • WPF

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Speichereffizientes SetPixel

    Ich muss derzeit sehr viele Pixel auf einer BitmapSource setzen können. Das Problem ist, dass WPF von Haus aus sowas nicht unterstützt. Im Netz stößt man jedoch immer auf den selben Code: tipsandtricks.runicsoft.com/CSharp/WpfPixelDrawing.html. Dieser funktioniert auch. Nur ist das bei mir totaler overkill. Ich muss viel zu oft neu zeichnen und bei jedem Render wird wie bei Bildern halt üblich wiederma verdammt viel Speicher verbraucht. Da stellt sich mir die Frage was gibt es für Alternativen. Es kann ja schlecht sein, dass ich jedes mal über BitmapSource.Create alles neu in den Speicher laden muss? Kann man nicht irgendeinen Buffer im Hintergrund bearbeiten? Finde das Ganze etwas übertrieben. Kennt ihr Alternativen?


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    thefiloe schrieb:

    Kennt ihr Alternativen?
    Trenne mal das "zeichnen" von dem updaten.
    Das Zeichnen ist halt so, Du kopierst die Pixel in den Speicher und bearbeitest sie.
    Vielleicht genügt es Dir, nur bei gewissen Situationen das Bild neu darzustellen, dann mach es ohne Timer und situationsabhängig.
    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 mache es ohne Timer und nö ich muss es neu zeichnen. Gezeichnet wird es von einem Callback(kann ich und will ich auch nicht beeinflussen - kommt vom system). Das ganze wird Realtime gezeichnet und muss halt neu gezeichnet werden wenn neue Daten kommen. Ich zeichne immer wenn ich einen "Strich" auf der Y-Achse habe. Das sieht dann so aus: s7.directupload.net/images/121125/4tvugw8v.png. Nur dann muss ich neu zeichnen sonst kann ich zeichnen auch gleich sein lassen. Hab jetzt aber ne Lösung gefunden. Ich erstellen einmal eine Bitmap wie bei dem geposteten Link. Anschließend lege ich auf diese Bitmap eine WriteableBitmap rauf und dort kann ich dann die Pixel aktualisieren. Danke trotzdem :). Ist immer so... erst sucht man ne halbe Ewigkeit und findet nix. Anschließend postet man irgendwo und 5 Minuten später findet man die Lösung :)


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    thefiloe schrieb:

    Hab jetzt aber ne Lösung gefunden. Ich erstellen einmal eine Bitmap wie bei dem geposteten Link. Anschließend lege ich auf diese Bitmap eine WriteableBitmap rauf
    Klingt cool.
    Du hast nicht zufällig Lust, einen Tipp davon zu machen, oder son Teil wenigstens im SourceCode einzustellen?