首先发布在这里:
-Deep Breath -
为了“窗口化”一个在OpenGL中完全可以全屏运行的应用程序(它主要从网络摄像头获取数据,在显示之前稍微晃动一下)我决定采取一些纹理数据和尝试让它在Windows窗体上绘制。
我决定用托管数组替换malloc的非托管内存块,然后使用它来创建一个BitmapSource,用它来创建一个Image,然后我可以将DrawImage()传递给Form。
实际上,这就是我所在的地方:
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));
并且我遇到了错误C2665 - 显然抱怨我的参数与预期的任何重载都不匹配,并且MyArray是罪魁祸首。
很可能是这里看不到树木的情况,但如果伴随着一次修正,我会很乐意接受不可避免的指点和笑声,这将使我能够按计划继续我的生活。
非常感谢提前。
以下回答:
我决定只是找到了重载,它从非托管数据中实例化,但是解决方案的工作方式是:
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));
此外,我要说谢谢你提供给我'nullptr',在尝试0之后,null,NULL等开始让我疯了!
答案 0 :(得分:0)
你正在为自己陷入困境。第3和第4个参数是double,而不是int。第6个参数是一个对象,而不是int,传递nullptr。该数组不是托管类型的数组,使用Byte。最后一个参数是int,而不是unsigned int。
我不得不建议你检查你的编程风格。