[C#] ByteToBitmap - Dateien visualisieren

    • Beta
    • Open Source

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

      [C#] ByteToBitmap - Dateien visualisieren

      ByteToBitmap

      Beschreibung:
      Dieses kleine Tool liest eine vom Benutzer ausgewählte Datei ein und erstellt aus deren Rohdaten (ihren Bytes) ein quadratisches Bild. Dazu liest es je vier Bytes, ordnet diesen dann den Aplha-, Rot-, Grün- und Blau-Kanälen einer Farbe zu und färbt so Pixel für Pixel ein.
      Ich kam auf diese Idee, als ich mir den Aufbau verschiedener Datei-Formate ansah und mich fragte, ob sich eine Datei visualisieren ließe. Das könnte unter Umständen bei einigen Datentypen hilfreich sein. Und das ist es auch (siehe Screenshots).
      Aber es ist vor allem eines: Kleinkram. Ich fand die Idee trotzdem interessant genug, sie hier mit euch zu teilen!

      Screenshots:
      Siehe Anhang, hier eine Erläuterung dazu:
      Diese Bilder habe ich anhand von drei Dateien generieren lassen.
      b2b1.PNG ist aus einer .NET-EXE erstellt worden (viele und vor allem Große Bilder in den Ressources).
      b2b2.PNG aus einer Video-Datei,
      b2b3.PNG aus einem Skyrim-Spielstand :D .

      Verwendete Programmiersprache und IDE:
      C# .NET (IDE: Visual Studio 2010 Ultimate, Visual Studio 2013 Ultimate)

      Systemanforderungen:
      .NET Framework 2.0

      Download:
      Projekt und Programm im Anhang als Zips

      Lizenz/Weitergabe:
      Freeware; OpenSource

      Über Kommentare und Ideen für eventuelle Verwendungszwecke würde ich mich freuen!

      MfG,
      X-Zat / Mo
      Bilder
      • b2b1.PNG

        543,13 kB, 898×986, 208 mal angesehen
      • b2b2.PNG

        2,19 MB, 850×931, 219 mal angesehen
      • b2b3.PNG

        1,29 MB, 884×999, 208 mal angesehen
      Dateien
      Die Idee finde ich ganz schön. So erhält man sogar n groben Überblick über den Aufbau der Datei. Nur an der Umsetzung hab ich ein paar Kritiken:
      CheckForIllegalCrossThreadCalls = false; //Not nice. Simple. Not nice stimmt schon. Guck mal im Forum, dass wurde schon öfters besprochen. Ausserdem würde ich mal versuchen komplett mit Zeigern zu arbeiten. So könntest du ja 1:1 den Speicher kopieren.
      Jo, einfach invoken, statt das Ganze zu unterdrücken.
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Danke für die Tipps!

      Klar, invoken wäre ne Idee, würde das ganze etwas schöner machen - Der Code ist quick and dirty, sollte auch eher experimentell sein, das ganze Projekt. Aber ja, ich fummel das heute Abend mal zurecht ;).
      Zu den Zeigern: Um mit Pointern arbeiten zu können, müsste ich unsafe-Code nutzen, oder? Hab' mich mit Pointern noch nicht sonderlich oft beschäftigt, muss mir mal angucken, wie die bei der Bitmap nutzen kann!

      MfG,
      X-Zat / Mo
      Ja, für Pointer brauchst Du unsafe, da ansonsten C# nicht auf die Speicherbereiche verweisen kann, denn normalerweise macht das ja der GC. Ist zwar in C# eher untergeordnet, aber trotzdem.
      Du kannst bei Zeigern dann auch dafür vorgesehene Operatoren nutzen -> für die Deferenzierung usw, falls Du das brauchst. Eventuell brauchst Du auch fixed-Anweisungen, um das Teil da im Speicher zu halten. Schau es Dir einfach mal an :P
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: