Chào mừng bạn đến với Stack Overflow, vui lòng không hỏi cùng một câu hỏi nhiều lần. Với các thẻ ít phổ biến hơn như Kinect, có thể mất chút thời gian để mọi người trả lời (thẻ chỉ có 79 người theo dõi).
Để đơn giản, tôi giả sử bạn muốn cắt ra một hình ảnh có kích thước đã đặt (ví dụ: 60x60 pixel trong số 800x600 ban đầu). Trong phương thức VideoFrameReady của bạn, bạn nhận được PlanarImage từ sự kiện args. PlanarImage này có trường bit, chứa tất cả dữ liệu RGB cho hình ảnh. Với một chút toán học, bạn có thể cắt ra một đoạn nhỏ dữ liệu đó và sử dụng nó như một hình ảnh nhỏ hơn.
// 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);
}
Hãy đảm bảo bạn hiểu mã, thay vì chỉ sao chép/dán mã. Hai vòng lặp dành cho việc sao chép mảng cơ bản, với số byte trên mỗi pixel được tính đến (4 cho BGR32). Sau đó, bạn sử dụng tập hợp con nhỏ của dữ liệu gốc để tạo một BitmapSource mới. Bạn sẽ cần phải thay đổi chiều rộng/chiều cao như bạn thấy phù hợp và xác định tọa độ X và Y từ theo dõi đầu.
cách chấp nhận câu trả lời cho câu hỏi của người khác? ;) – Dinushan
Cảm ơn sự giúp đỡ của bạn! Nhưng điều này sẽ chỉ ở trong một vị trí. Vì vậy, nếu tôi muốn theo dõi đầu của tôi, khi đầu của tôi di chuyển, smallVideo cũng sẽ di chuyển để phù hợp với đầu của tôi vào điều khiển hình ảnh. làm thế nào để làm như vậy? Những gì bạn đưa ra đã giúp tôi rất nhiều! – user981924
@ user981924: những gì bạn cần làm là tạo các biến xCoord và yCoord toàn cầu. Sau đó, trên sự kiện SkeletonFrameReady, hãy thay đổi các biến đó tùy thuộc vào vị trí của đầu. Chỉ cần chắc chắn rằng bạn giữ các giá trị trong giới hạn (nếu xCoord hoặc yCoord nhỏ hơn 0 ví dụ, bạn có nguy cơ OutOfBoundsException). – Coeffect