1
Я только начал использовать EmguCV для обработки изображений Kinect, и ArgumentException происходило при создании EmguCV изображения из глубины потока, как это:преобразовать Kinect глубина изображения ошибки изображения EmguCV
private void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
DepthImageFrame df = e.OpenDepthImageFrame();
if (df != null)
{
short[] data = new short[df.PixelDataLength];
df.CopyPixelDataTo(data);
Bitmap b = data.ToBitMap(df.Width, df.Height, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);
Image<Gray, short> im = new Image<Gray, short>(b); //run-time exception here
Метод расширения ToBitmap полностью копируются с Kinect SDK учебник пример:
public static Bitmap ToBitmap(this short[] data, int width, int height, System.Drawing.Imaging.PixelFormat format)
{
var bitmap = new Bitmap(width, height, format);
var bitmapData = bitmap.LockBits(
new System.Drawing.Rectangle(0, 0, bitmap.Width,
bitmap.Height),
ImageLockMode.WriteOnly,
bitmap.PixelFormat);
Marshal.Copy(data, 0, bitmapData.Scan0, data.Length);
bitmap.UnlockBits(bitmapData);
return bitmap;
}
Я проверил, что b
имел действительное значение, а не нулевой. Интересно, почему произошло это исключение, есть ли проблема с форматом изображения?
Я уже нашел, что 'b' является недействительным, и когда я изменить формат растрового изображения, чтобы rgb565 он работал вместе с' '. Но что мне делать, если мне нужно поддерживать 16-битную точность? Я слышал, что «bitmap» на самом деле не поддерживал 16-битную серию, потому что не было 16-битной графической карты, правда? Теперь я пытаюсь использовать '' в качестве среднего формата, а затем снова копировать данные в 'short []', а затем напрямую конвертировать 'short []' в 'BitmapSource', я проверю, работает ли это. Спасибо всем тем же –
Cherry