Effizient Pixel manipulieren

Hi,

Windows (Vista), C#:

ich erstelle ein Bild im Hauptspeicher (RGB array: char Pixels[1024 * 768][3]).

Dieses möchte ich permanent möglichst schnell in einem Windows-Fenster oder ähnliches anzeigen.

Wie geht das?

Unter MS DOS konnte man die Pixel in den in das RAM eingeblendeten Grafikspeicher schreiben, das war sehr schnell. Unter (modernen) Windows geht das natürlich aus Sicherheitsgründen nicht mehr.

Momentan erstelle ich ein Bitmap und setze dies als Form.BackgroundImage.

Leider ist das nicht sehr schnell, höchstens ~20 frames per second, ohne irgendwelche sonstigen Berechnungen :frowning:

DirectX wäre evtl. eine Option, aber NUR das Anzeigen der Pixel, KEINE 3D Berechnung!

Danke im Voraus für hilfreiche Antworten.

Hallo

DirectX ist Deine einzige Chance.
Suche nach Beispielen im Net.

Etwas anderes ist es, wenn Du Dich mit dem Videotreiber „unterhalten“ könntest, oder einen Speicherbereich anfordern kannst, der der Grafikkarte gehört. Geht mit Assembler ganz gut.
Oder Du nimmst OpenGL, falls man das mit C# benutzen kann.

MfG
Matthias

Nachtrag
Was in GDI+ drin ist, kannst Du auch mal nachschauen.

Hi,

erstmal, dein Nick ist cool ^^

Also zum Thema, ich hab früher mal Graphen mit GDI+ in ein Panel gezeichnet, ging sauschnell, sogar auf meinem alten Netbook ^^
http://openbook.galileocomputing.de/visual_csharp/vi…
Ansonsten kannst du dir mal WPF anschauen, das ist für solche Dinge ideal. Da kannst du direkt Linien und Punkte und was weiß ich was alles zeichnen lassen, läuft DX basiert und ist daher auch relativ schnell. Wenn du da Hilfe brauchst sag Bescheid :wink:

Lg Knerd

hoi,

leider sind die onboardmittel von .net nicht wirklich performant.
du kannst aber mit dem unsafe keyword/compilerflag auf den Scan0-pointer eines bildes zugreifen, und hast somit auch den zugrif auf die pixel und kannst die in jeder erdenklichen art und weise manipulieren.
ich habe neulich in der c# gruppe auf fb eine ähnliche frage gestellt bekommen. du kannst dir hier den noch nicht ganz fertigen (undebuggten) code anschauen, um ein gefühl für das filtern zu bekommen:
http://pastebin.com/hF5dukq4
greetz, me