BitmapSource :: Создать ошибку компиляции C2665 - Недопустимый параметр массива? - PullRequest
0 голосов
/ 02 января 2011

Первый пост здесь:

- Глубокое дыхание -

Чтобы «окантовать» приложение, которое довольно хорошо работает в полноэкранном режиме в OpenGL (которое, по сути, берет данные с веб-камеры, немного гадит перед ее отображением), я решил взять кусочек текстуры и попытайтесь заставить это нарисовать на форме Windows.

Я полон решимости заменить кусок неуправляемой памяти malloc на управляемый массив, а затем использовать его для создания BitmapSource, с помощью которого можно создать изображение, которое я затем смогу DrawImage () для формы.

По сути, вот где я нахожусь:

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 и т. Д. Начал сводить меня с ума!

1 Ответ

0 голосов
/ 02 января 2011

Вы подвергаете себя беде. 3-й и 4-й аргументы являются двойными, а не int. 6-й аргумент - это объект, а не int, передайте nullptr. Массив не является массивом управляемого типа, используйте Byte. Последний аргумент - int, а не unsigned int.

Я бы порекомендовал вам пересмотреть свой стиль программирования.

...