C # Bitmap GetPixel (), SetPixel () in der GPU

8

Ich benutze Cudafy als c # -Wrapper Ich muss die Farbinformation InputBitmap0.GetPixel(x, y) einer Bitmap erhalten und eine neue Bitmap für die Ausgabe erstellen.

Ich brauche folgende Arbeit in GPU.

IN CPU

%Vor%

Kurz gesagt:

Wie GetPixel () für jeden Pixelpunkt der Eingabe Bitmap, SetPixel () für jeden Pixelpunkt der outputbitmap Bitmap in GPU.

    
Md Sifatul Islam 04.02.2017, 07:21
quelle

2 Antworten

5
  

OutputBitmap.SetPixel (object_point_x, object_point_y, InputBitmap0.GetPixel (x, y))

Es hat Zeit gebraucht, aber schließlich habe ich meinen Fall geknackt.

Wir haben zwei Bitmap : eine für die Ausgabe OutputBitmap und eine weitere für die Eingabe InputBitmap0

Teilen Sie diese Aufgabe in Teile:

  1. do InputBitmap0.GetPixel() für x , y koordinate
  2. dann OutputBitmap.SetPixel() für eine andere Koordinate object_point_x, object_point_y

Cudafy unterstützt keine Daten vom Typ Bitmap oder Color . Also habe ich die Bitmaps in byte type konvertiert.

%Vor%

Wir haben den Inhalt von InputBitmap0 in das Array rgbValues kopiert. Jetzt müssen wir die Arbeit von GetPixel() ausführen (holen Sie sich die Werte von R, G, B, A).

Wir müssen die obige Arbeit (make array) auch für OutputBitmap machen, weil wir SetPixel() in GPU machen werden, aber wir werden das Array später wieder in die Bitmap kopieren.

%Vor%

Die GPU-Zeit für die Berechnung. Lets initialisieren gpu.

%Vor%

Senden Sie nun input_ragba_color und output_ragba an die GPU, da wir das Array iterieren und Berechnungen durchführen können.

%Vor%

Jetzt in GPU (Kernel)

%Vor%
  

Ich nehme Werte von jedem R, G, B, A, zB: input_ragba_color[(y * stride0) + (x * 4) + 1] , was die erste Aufgabe löst   ( InputBitmap0.GetPixel() )

     

dev_output_rgba_color nimmt die Werte von input_ragba_color   Beispiel:

%Vor%      

was unsere zweite Aufgabe löst ( OutputBitmap.SetPixel() )

Wir wissen jetzt, dass die GPU ein Array ( dev_output_rgba_color ) für unsere OutputBitmap gefüllt hat.

%Vor%

Kopieren Sie das Ergebnis mit dem Speicherzeiger zurück in die OutputBitmap und entsperren Sie es aus dem Speicher.

%Vor%

Jetzt enthält OutputBitmap die aktualisierten Werte.

    
Md Sifatul Islam 10.03.2017, 19:23
quelle
1

Ich denke, Sie müssen ein byte[] verwenden und das auf der GPU zuweisen. Ich habe gesehen, wie du herumgefragt hast und diese Antwort ist ein work in progress, ich Ich werde es in den nächsten Tagen aktualisieren, wenn ich Zeit habe.

%Vor%     
Jeremy Thompson 09.03.2017 05:42
quelle

Tags und Links