2016-12-15 10 views
3

Kinect에서받은 이미지를 png로 저장하려고했습니다. 패키지에서 kinect 샘플을 집어 들었습니다.이 샘플은 두 평면에 깊이와 색상을 모두 보여 주며 수정합니다. color32를 직접 저장하거나 다른 텍스처로 전송하는 것과 같은 다른 접근법을 시도했지만 아무 것도 효과가 없었습니다. 주 Unity Scene의 두 평면에 표시된 두 이미지를 볼 수 있습니다. 다음은 이미지를 저장해야하는 코드입니다.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; 
} 

샘플 코드에 3 줄을 추가했습니다.이 코드는 Update 기능의 주석으로 표시했습니다. 나는 또한 업데이트를 LateUpdate로 변경하려고 시도했지만 아무 것도 변경되지 않았습니다.

+0

'Color32 [] src'에서 값을 로깅하면 예상 한 색상 값 (기본적으로 모두 0,0,0이 아님)이 반환됩니까? – Serlite

+0

아니요가 모두 0이 아닙니다. 그리고 텍스쳐 (한 장의 그림과 한 장의 깊이)를 두 개의 평면에 매핑하여 평면에서 이미지를 볼 수 있습니다. – D3GAN

+0

흠 ... 배열을 반복하면서 검색하는 값에 대한 로깅은 어떻습니까? TLidx, TRidx, BLidx, BRidx의 가치 범위는 어느 정도입니까? 또한 0-255 사이에 다양합니까? – Serlite

답변

0

키 넥트 샘플 코드는 다음과 질감을 생성했다 :

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

을로 변경 :

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

문제를 해결. 이 link에서는 EncodeToPNG 기능이 ARGB32 및 RGB24에서 모두 작동한다고 주장하지만 이것이 사실이 아닌 것 같습니다.