BitmapSource::Create compile error C2665 - Array parameter invalid?
First post here:
-Deep Breath-
In order to 'windowise' an app that works pretty well fullscreen in OpenGL (which essentially takes data from a webcam, mucks about a bit before displaying it) I've decided to take a bit lump of texture data and attempt to get this to draw on a Windows Form.
I'm determined to substitute the malloc'd lump of unmanaged memory with a managed array and then use this to create a BitmapSource with which to make an Image which I can then DrawImage() to the Form.
Effectively, here's where I am:
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));
and I'm greeted with error C2665 - apparently complaining that my parameters don't match either of the overloads expected and that MyArray is the culprit.
Most likely a case of not seeing the wood for the trees here but I'd be happy to take the inevitable pointing and laughing if accompanied by a correction which will allow me to continue with my life as planned.
Many thanks in advance.
Following answer:
I decided having just found the overload which instantiate开发者_JAVA技巧s from unmanaged data that I'd go with that but the solution works either way:
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));
Also I've got to say thank you for offering me 'nullptr' which after trying 0, null, NULL etc was starting to drive me nuts!
You are casting yourself into trouble. The 3rd and 4th arguments are double, not int. The 6th argument is an object, not an int, pass nullptr. The array is not an array of a managed type, use Byte. The last argument is an int, not an unsigned int.
I'd have to recommend you review your programming style.
精彩评论