Pixel Array auf Bildschirm zeichnen

  • C#
  • .NET (FX) 4.0

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

    Pixel Array auf Bildschirm zeichnen

    Hallo Community,
    Ich hätte eine Frage zu einem Problem, zu welchem es bereits viele Fragen gibt und zu welchem auch schon viele Antworten existieren. Allerdings ist keine dabei, die mich so wirklich überzeugt.
    Ich habe einen zweidimensionalen Array, welcher die Farbdaten für jeden einzelnen Pixel des Bildschirms beinhaltet. Diesen möchte ich nun auslesen und entsprechend zu dem Farbwert einen Pixel einzeichnen.
    In Direct2D habe ich das bisher mit der FillRectangle-Methode gehandhabt, welche mir allerdings als sehr langsam und unschön erscheint (Warum 1920x1080 kleine Rechtecke zeichnen, wenn man nur einen Pixel ansprechen will).
    Somit würde ich nun gerne wissen, ob es denn wirklich keine andere Möglichkeit gibt, um dieses Vorhaben deutlich schneller umzusetzen.
    Als DirectX-Wrapper verwende ich SharpDX, wenn das in der Hinsicht irgendeine Rolle spielen sollte.
    Auch Dunkelheit kann Erleuchtung bringen...

    Karabonga schrieb:

    Ich habe einen zweidimensionalen Array, welcher die Farbdaten für jeden einzelnen Pixel des Bildschirms beinhaltet.
    In welchem Format liegen die vor?
    Du kannst z.B. eine BitmapSource davon erstellen:

    C#-Quellcode

    1. BitmapSource image = BitmapSource.Create(
    2. _Width, _Height,
    3. 96, 96,
    4. PixelFormats.Gray16, // das Format
    5. null, // BitmapPalettes.Gray16,
    6. _Pixels, // Dein Array
    7. _Stride);
    oder sie in eine gelockte Bitmap reinblasen:

    C#-Quellcode

    1. Bitmap bmp = New Bitmap(10, 20, Imaging.PixelFormat.Format24bppRgb); // ein anderes Format
    2. Imaging.BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, 10, 20), Imaging.ImageLockMode.WriteOnly, Imaging.PixelFormat.Format24bppRgb);
    3. //'bmpData.Scan0 // Pointer auf 1. Pixel
    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!
    Der Array besteht aus der Color4-Klasse der SharpDX Library.
    Und eine System.Drawing.Bitmap daraus zu erstellen würde mir eher weniger helfen, da ich diese dann in Echtzeit in eine SharpDX.Direct2D1.Bitmap umwandeln müsste, sodass man im nachhinein mehr Aufwandt hätte als zuvor.
    Auch Dunkelheit kann Erleuchtung bringen...