2011-01-02 6 views
0

erster Beitrag hier:BitmapSource :: Kompilierungsfehler erstellen C2665 - Array-Parameter ungültig?

-Deep Atem-

Um ‚windowise‘ eine App, die in OpenGL (die im wesentlichen von Daten aus einer Webcam nimmt, mucks über ein bisschen vor dem Anzeigen es) ziemlich gut funktioniert Vollbild Ich habe mich entschieden, ein wenig Klumpen von Texturdaten und Versuch zu nehmen, um dies auf ein Windows Form zu zeichnen.

Ich bin entschlossen, den Malloc'd Klumpen von nicht verwaltetem Speicher durch ein verwaltetes Array zu ersetzen und dann dies zu verwenden, um eine BitmapSource zu erstellen, mit der ich dann DrawImage() zu dem Formular erstellen kann.

effektiv, hier ist, wo ich bin:

cli::array<char>^ MyArray = gcnew cli::array<char>(10000); 

BitmapSource^ bmpSource = BitmapSource::Create(
(int)g_nTexMapX, 
(int)g_nTexMapY, 
(int)300, 
(int)300, 
(System::Windows::Media::PixelFormat)PixelFormats::Rgb24, 
(int)0, 
MyArray, 
(unsigned int)(g_nTexMapX*3 +(g_nTexMapX*3) %4)); 

und ich bin mit Fehler C2665 begrüßt - offenbar beschwert, dass meine Parameter erwartet nicht eine der beiden Überlastungen übereinstimmen und dass MyArray ist der Schuldige.

Wahrscheinlich ein Fall, in dem ich den Wald nicht für die Bäume sehe, aber ich würde froh sein, das Unvermeidliche zu zeigen und zu lachen, wenn er von einer Korrektur begleitet wird, die mir erlaubt, mein Leben wie geplant fortzusetzen.

Vielen Dank im Voraus.

folgende Antwort:

entschied ich mich mit nur die Überlastung gefunden, die von nicht verwalteten Daten instanziiert, die ich damit gehen würde, aber die Lösung funktioniert in beiden Richtungen:

IntPtr myPixels = (IntPtr)g_pTexMap; // <- Pointer to my pixel data. 

BitmapSource^ bmpSource = BitmapSource::Create(
    (int)g_nTexMapX, 
    (int)g_nTexMapY, 
    300.0, 
    300.0, 
    PixelFormats::Rgb24, 
    nullptr, 
    myPixels, 
    (int)(g_nTexMapX * g_nTexMapY * 3), 
    (int)(g_nTexMapX*3 +(g_nTexMapX*3) %4)); 

Auch ich habe Danke, dass du mir 'nullptr' angeboten hast, was nach dem Versuch, 0, null, NULL usw., mich verrückt zu machen begann!

Antwort

0

Sie werfen sich in Schwierigkeiten. Das 3. und 4. Argument sind doppelt, nicht int. Das 6. Argument ist ein Objekt, kein int, pass nullptr. Das Array ist kein Array eines verwalteten Typs. Verwenden Sie Byte. Das letzte Argument ist ein int, kein unsigned int.

Ich würde empfehlen, dass Sie Ihren Programmierstil überprüfen.

+0

Ausgezeichnet. Vielen Dank für deine Hilfe. Ich habe die korrigierte Version im ursprünglichen Beitrag gepostet. – OddRob