BitmapSource ::创建编译错误C2665 - 数组参数无效?

时间:2011-01-02 18:56:25

标签: .net winforms wpf-controls c++-cli managed-c++

首先发布在这里:

-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等开始让我疯了!

1 个答案:

答案 0 :(得分:0)

你正在为自己陷入困境。第3和第4个参数是double,而不是int。第6个参数是一个对象,而不是int,传递nullptr。该数组不是托管类型的数组,使用Byte。最后一个参数是int,而不是unsigned int。

我不得不建议你检查你的编程风格。