Как упорядочить массив unsigned short (c ++) -> ushort (c #) или прочитать собственный массив для создания BitmapSource? - PullRequest
0 голосов
/ 17 мая 2019

Нет перегрузки для копирования данных из собственного массива unsigned short в управляемый массив ushort:

https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.copy?view=netframework-4.8

Как этого достичь?

  • Маршал к byte[] Затем соединить 2 байта с Ушортом?как?
  • маршал к short[], затем приведение к ushort[]?

Код для второго решения будет (с unsafe):

var imageArray16 = new short[GetSize()];
Marshal.Copy(imageFeaturesPack.Data, imageArray16, 0, GetSize());
var imageArray16Converted = imageArray16.Select(o => *((ushort*)(void*)&o)).ToArray();
Bitmap = BitmapSource.Create(Width, Height, 96, 96, PixelFormats.Rgb48, null,
    imageArray16Converted, GetStride());

Но любой из них добавляет сложности.

Цель состоит в том, чтобы скопировать изображение C ++ unsigned short[] в BitmapSource, например:

var array = new short[GetSize()]; //GetSize() => width*height*colors;
Marshal.Copy(nativeDataPointer, array, 0, GetSize());
Bitmap = BitmapSource.Create(Width, Height, 96, 96, PixelFormats.Rgb48, null, array,
    GetStride()); //GetStride() => width*colors;

Могу ли я в конечном итоге прочитать непосредственно собственный массивиз своего указателя для создания BitmapSource?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...