Добро пожаловать в Stack Overflow, пожалуйста, не задавайте один и тот же вопрос несколько раз. С менее популярными тегами, такими как Kinect, людям может потребоваться некоторое время, чтобы ответить (у тега только 79 подписчиков).
Для простоты я собираюсь предположить, что вы хотите обрезать изображение установленного размера (например, 60x60 пикселей из исходного 800x600). В вашем методе VideoFrameReady вы получаете PlanarImage из аргументов события. Этот PlanarImage имеет поле битов, которое содержит все данные RGB для изображения. С небольшой математикой вы можете вырезать небольшой кусок этих данных и использовать его в качестве меньшего изображения.
// update video feeds
void nui_VideoFrameReady(object sender, ImageFrameReadyEventArgs e)
{
PlanarImage image = e.ImageFrame.Image;
// Large video feed
video.Source = BitmapSource.Create(image.Width, image.Height, 96, 96, PixelFormats.Bgr32, null, image.Bits, image.Width * image.BytesPerPixel);
// X and Y coordinates of the smaller image, and the width and height of smaller image
int xCoord = 100, yCoord = 150, width = 60, height = 60;
// Create an array to copy data into
byte[] bytes = new byte[width * height * image.BytesPerPixel];
// Copy over the relevant bytes
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width * image.BytesPerPixel; j++)
{
bytes[i * (width * image.BytesPerPixel) + j] = image.Bits[(i + yCoord) * (image.Width * image.BytesPerPixel) + (j + xCoord * image.BytesPerPixel)];
}
}
// Create the smaller image
smallVideo.Source = BitmapSource.Create(width, height, 96, 96, PixelFormats.Bgr32, null, bytes, width * image.BytesPerPixel);
}
Пожалуйста, убедитесь, что вы понимаете код, а не просто копируете / вставляете его. Два цикла for предназначены для базового копирования массива с учетом количества байтов на пиксель (4 для BGR32). Затем вы используете это небольшое подмножество исходных данных для создания нового BitmapSource. Вам нужно будет изменить ширину / высоту по своему усмотрению и определить координаты X и Y из отслеживания головы.