У меня есть высокоскоростная камера, которая отображается в элементе управления WPF. SDK камеры предоставляет мне массив байтов, представляющих данные изображения. Я ищу наиболее эффективный способ привязки к этим изображениям в элементе управления Canvas. Эти изображения отображаются рядом друг с другом из коллекции, состоящей из 20 изображений.
Мой текущий метод работает именно так, как я хочу, но я чувствую, что слишком много ненужных преобразований.
Сначала я преобразовываю свой байтовый массив в растровое изображение следующим образом:
//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);
Затем я вызываю эту функцию для преобразования растрового изображения в источник растрового изображения:
BitmapSource source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(), IntPtr.Zero, System.Windows.Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(bmp.Width, bmp.Height));
Обратите внимание, что я пропускаю утилизацию / очистку для удобства чтения. Я должен использовать BitmapSource, чтобы я мог связать ImageSource для отображения изображений. Если бы это был XNA, я бы использовал Texture2D, и он бы летал. Я полагаю, что с тех пор, как в основе WPF используется DirectX, должен быть лучший способ, чем использование грубых битовых карт.
Есть идеи?