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.
Es hat Zeit gebraucht, aber schließlich habe ich meinen Fall geknackt.OutputBitmap.SetPixel (object_point_x, object_point_y, InputBitmap0.GetPixel (x, y))
Wir haben zwei Bitmap
: eine für die Ausgabe OutputBitmap
und eine weitere für die Eingabe InputBitmap0
Teilen Sie diese Aufgabe in Teile:
InputBitmap0.GetPixel()
für x
, y
koordinate 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.
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.
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.
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()
)%Vor%
dev_output_rgba_color
nimmt die Werte voninput_ragba_color
Beispiel: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.
Kopieren Sie das Ergebnis mit dem Speicherzeiger zurück in die OutputBitmap
und entsperren Sie es aus dem Speicher.
Jetzt enthält OutputBitmap
die aktualisierten Werte.
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.
Tags und Links c# image bitmap gpgpu cudafy.net