Нет перегрузки для копирования данных из собственного массива 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?