Создание oposite Зеркальное изображение путем манипулирования Kinect Цветные пиксели

Я пытаюсь создать противоположную зеркальную картину из цветового потока, т.е. Когда правая рука движется вверх, я хочу, чтобы киндекс рисовал левый, чтобы двигаться вверх (в отличие от реального зеркала, которое поднимает правая рука) Я хочу манипулировать цветным изображением, чтобы сделать это: просто перемещая X-позицию. Тем не менее, я получаю синий экран:

void kinectSensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
 {
 try
 {
 using (ColorImageFrame colorImageFrame = e.OpenColorImageFrame())
 {
 if (colorImageFrame != null)
 {
 byte[] pixelsFromFrame = new byte[colorImageFrame.PixelDataLength];
 colorImageFrame.CopyPixelDataTo(pixelsFromFrame);
 Color[] color = new Color[colorImageFrame.Height * colorImageFrame.Width];
 kinectRGBVideo = new Texture2D(graphics.GraphicsDevice, colorImageFrame.Width, colorImageFrame.Height);

 // Go through each pixel and set the bytes correctly
 // Remember, each pixel got a Rad, Green and Blue
 int index = 0;
 for (int y = 0; y < colorImageFrame.Height; y++)
 {
 for (int x = 0; x < colorImageFrame.Width; x++, index += 4)
 {
 color[(y * colorImageFrame.Width + x)] = new Color(pixelsFromFrame[(y+1)*(2560 -index)],
 pixelsFromFrame[(y + 1) * (2560 - index)],
 pixelsFromFrame[(y + 1) * (2560 - index)]);
 }
 }
 // Set pixeldata from the ColorImageFrame to a Texture2D
 kinectRGBVideo.SetData(color);


 }
 }
 }
 catch { 


 }
 }

Может ли кто-нибудь сказать мне, что это? Благодаря erez

1 ответ

Код для создания отражения

unsafe void reflectImage(byte[] colorData, int width, int height)
{
 fixed (byte* imageBase = colorData)
 {
 // Get the base position as an integer pointer
 int* imagePosition = (int*)imageBase;
 // repeat for each row
 for (int row = 0; row < height; row++)
 {
 // read from the left edge
 int* fromPos = imagePosition + (row * width);
 // write to the right edge
 int* toPos = fromPos + width - 1;
 while (fromPos < toPos)
 {
 *toPos = *fromPos;
 //copy the pixel
 fromPos++; // move towards the middle
 toPos--; // move back from the right edge
 }
 }
 }
}

Это делает так, что байты в toPos и fromPos переключают стороны, потому что код фиксирует указатель байта в базе байтов данных изображения, а затем создает целочисленный указатель из этого значения. Это означает, что для копирования всех байтов данных для одного пикселя из одного места в другое программа может использовать один оператор: *toPos = *fromPos;

Источник

licensed under cc by-sa 3.0 with attribution.