У меня есть высокоскоростная камера, которую я показываю в элементе управления WPF. SDK камеры предоставляет мне массив байтов, представляющих данные изображения. Я ищу наиболее эффективный способ привязки к этим изображениям в элементе управления Canvas. Эти изображения отображаются бок о бок из коллекции, не превышающей 20 изображений.
Мой текущий метод работает именно так, как я хочу, но я чувствую, что слишком много ненужных преобразований.
Сначала я конвертирую свой байтовый массив в Bitmap следующим образом:
//note dataAdress is an IntPtr I get from the 3rd party SDK
//i also have width and height ints
bmp = new Bitmap(width, weight, PixelFormat.Format32bppRgb);
BitmapData bData = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format32bppRgb);
int datasize = width * height * 4;
byte[] rgbValues = new byte[datasize];
Marshal.Copy(dataAdress, rgbValues, 0, datasize);
Marshal.Copy(rgbValues, 0, bData.Scan0, datasize);
bmp.UnlockBits(bData);
Затем я вызываю эту функцию для преобразования Bitmap в BitmapSource:
BitmapSource source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(), IntPtr.Zero, System.Windows.Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(bmp.Width, bmp.Height));
Обратите внимание, что я пропускаю некоторые операции по удалению / очистке для удобства чтения. Мне нужно использовать BitmapSource, чтобы я мог привязать ImageSource для отображения изображений. Если бы это был XNA, я бы использовал Texture2Ds, и это сработало бы. Я полагаю, поскольку в основе WPF используется DirectX, должен быть лучший способ, чем использование общих растровых изображений.
Любые идеи?