So arbeiten Sie mit Pixeln mit Direct2D

  • Könnte jemand ein Beispiel für eine effiziente Methode zur Verwendung von Pixeln mit Direct2D geben?

    Wie kann ich beispielsweise all grüne Pixel (RGB = 0x00FF00) mit roten Pixeln (RGB = 0xFF0000) auf einem Renderziel? Was ist der Standardansatz? Kann man ID2D1HwndRenderTarget dafür verwenden? Ich gehe davon aus, eine Art Hardwarebeschleunigung zu verwenden. Soll ich ein anderes Objekt für direkte Pixelmanipulationen erstellen?

    Mit DirectDraw würde ich die Methode BltFast für die IDirectDrawSurface7 mit logischer Operation verwenden. Gibt es etwas Ähnliches mit Direct2D?

    Eine andere Aufgabe besteht darin, komplexe Bilder dynamisch zu erzeugen, wobei jeder Punkt, Ort und Farbe, das Ergebnis einer mathematischen Funktion ist. Um ein Beispiel zu erhalten, vereinfachen wir alles und zeichnen Y = X ^ 2. Wie geht das mit Direct2D? Letztendlich muss ich komplexe Funktionen zeichnen, aber wenn mir jemand ein einfaches Beispiel für Y = X ^ 2 geben könnte.

    15 March 2014
    Grant PalinMoses Aprico
2 answers
  • Zunächst ist es hilfreich, ID2D1Bitmap als "Gerätebitmap" zu betrachten. Sie kann im lokalen, CPU-adressierbaren Speicher liegen oder nicht, und bietet Ihnen keine bequeme (oder zumindest schnelle) Möglichkeit, die Pixel von der CPU-Seite des Busses zu lesen / schreiben. Aus diesem Blickwinkel zu nähern ist daher wahrscheinlich der falsche Ansatz.

    Was ich denke, ist eine reguläre WIC-Bitmap, IWICBitmap, die Sie mit IWICImagingFactory :: CreateBitmap () erstellen können. Von dort aus können Sie Lock () aufrufen, um an den Puffer zu gelangen, und dann mit Zeigern lesen und schreiben und machen, was Sie möchten. Wenn Sie es mit Direct2D auf dem Bildschirm zeichnen müssen, erstellen Sie mit ID2D1RenderTarget :: CreateBitmap () eine neue Gerätebitmap oder mit ID2D1Bitmap :: CopyFromMemory () eine vorhandene Gerätebitmap. Sie können auch in eine IWICBitmap rendern, indem Sie ID2D1Factory :: CreateWicBitmapRenderTarget () (nicht hardwarebeschleunigt) verwenden.

    Sie erhalten für diese Arten von Operationen keine Hardwarebeschleunigung. Das aktualisierte Direct2D in Win8 (sollte auch für Win7 verfügbar sein) hat einige schicke Sachen, aber es sieht ziemlich komplex aus.

    22 February 2012
    Rick Brewster
  • Das spezifische Problem des Austauschs aller grünen Pixel mit roten Pixeln kann über ID2D1Effect ab Windows 8 und Platform Update für Windows 7.

    Insbesondere Farbmatrixeffekt.

    28 August 2013
    vt.