2016-12-15 4 views
3

Я попытался сохранить изображения, полученные от Kinect в виде png. Я взял образец пакета из пакета, который показывает как глубину, так и цветное изображение на двух плоскостях, и я их модифицирую. Я пробовал разные подходы, такие как сохранение цвета32 напрямую или перенос его на другую текстуру, но никто не работал. Примечание. Я вижу оба изображения, отображаемые на двух плоскостях в сцене Unity. Вот код, который я должен сохранить.сохраненные изображения из kinect черные

void Update() { 

    if (kinect.pollColor()) 
    { 
     tex.SetPixels32(mipmapImg(kinect.getColor(),640,480)); 
     // Code by me to save the image 
     byte[] bytes = tex.EncodeToPNG(); 
     File.WriteAllBytes("screenshots/testscreen-" + imageCount + ".png", bytes); 
     imageCount++; 
     // 
     tex.Apply(false); 
    } 
} 

private Color32[] mipmapImg(Color32[] src, int width, int height) 
{ 
    int newWidth = width/2; 
    int newHeight = height/2; 
    Color32[] dst = new Color32[newWidth * newHeight]; 
    for(int yy = 0; yy < newHeight; yy++) 
    { 
     for(int xx = 0; xx < newWidth; xx++) 
     { 
      int TLidx = (xx * 2) + yy * 2 * width; 
      int TRidx = (xx * 2 + 1) + yy * width * 2; 
      int BLidx = (xx * 2) + (yy * 2 + 1) * width; 
      int BRidx = (xx * 2 + 1) + (yy * 2 + 1) * width; 
      dst[xx + yy * newWidth] = Color32.Lerp(Color32.Lerp(src[BLidx],src[BRidx],.5F), 
                Color32.Lerp(src[TLidx],src[TRidx],.5F),.5F); 
     } 
    } 
    return dst; 
} 

Я добавил три строки к образцу кода, который отмечен комментариями в функции «Обновить». Я также попытался изменить Update на LateUpdate, но ничего не изменилось.

+0

Если вы попытаетесь выполнить регистрацию любых значений из 'Color32 [] src', вы получите ожидаемые значения цвета (в основном не все 0,0,0)? – Serlite

+0

Нет, не все 0s. И я сопоставил текстуры (одно изображение и одну глубину) до двух плоскостей, и я вижу изображение на самолетах. – D3GAN

+0

Hm ... как насчет регистрации значений, которые вы извлекаете при повторении по массиву? Какой диапазон значений вы возвращаете для TLidx, TRidx, BLidx, BRidx? Также варьируется от 0 до 255? – Serlite

ответ

0

Kinect образец кода создавал текстуру, как это:

tex = new Texture2D(320,240,TextureFormat.ARGB32,false); 

изменить его на:

tex = new Texture2D(320,240,TextureFormat.RGB24,false); 

решаемые проблемы. В этом link он утверждает, что функция EncodeToPNG будет работать как на ARGB32, так и на RGB24, но, похоже, это не так!

Смежные вопросы