2014-05-22 2 views
0

센서의 컬러 이미지를 사용하는 Kinect 애플리케이션을 작성하고 있습니다. 나는 640 x 480 컬러 이미지를 얻었고 센서의 데이터를 WritePixels 메서드로 WriteableBitmap에 복사했습니다. 전체 컬러 이미지를 사용할 때 아무런 문제가 없습니다. 그러나 이미지의 가운데 부분 만 사용하고 싶습니다. 그러나 나는 보폭을 얻을 수 없으며, 또는 오른쪽 오프셋을 할 수 없습니까? 나는 단지 이미지의 중간 부분을 원하는 언급으로WritePixels의 보폭과 오프셋 계산 문제

_colorImageWritableBitmap.WritePixels(
       new Int32Rect(0, 0, colorImageFrame.Width, colorImageFrame.Height), 
       _colorImageData, 
       colorImageFrame.Width * Bgr32BytesPerPixel, 
       0); 

:

내가 다음을 수행 전체 이미지를 복사합니다. 나는 폭이 185px에서 시작하여 다음 270px를 가져다가 멈추고 싶습니다. 그리고 나는 전체 높이를 사용합니다.

내 PixelFormat은 bgr32이므로 바이트 수를 계산할 수 있습니다. 픽셀 내가 사용

var bytesPrPixel = (PixelFormats.Bgr32.BitsPerPixel + 7)/8; 

그리고 내 보폭 :

var stride = bytesPrPixel*width; 

writepixel 방법 :

_colorImageWritableBitmap.WritePixels(
       new Int32Rect(0, 0, colorImageFrame.Width, colorImageFrame.Height), 
       _colorImageData, stride, offset); 

하지만 640 이외의 너비를 변경하면 이미지가 잘못 얻는다 (숨겨진 잡음 있음).

내가 여기서 잘못하고있는 것을 누군가 이해할 수 있습니까?

+0

센터 스퀘어 또는 원을 원하십니까? – bonCodigo

+0

그냥 가운데 사각형을 사용하십시오 270 x 480 – DNRN

+0

실행하는 동안 너비를 편집합니까? 그렇다면 너는 보폭과 너비를 사용하는 모든 다른 var도 편집해야 할 것입니다. –

답변

0

원본 비트 맵에서 픽셀을 올바르게 복사해야합니다. 당신에게, WriteableBitmap을 사용

colorImageWritableBitmap.WritePixels(
    new Int32Rect(0, 0, width, height), pixels, stride, 0); 

또는 대신 :

var width = 270; 
var height = 480; 
var x = (colorImageFrame.PixelWidth - width)/2; 
var y = 0; 
var stride = (width * colorImageFrame.Format.BitsPerPixel + 7)/8; 
var pixels = new byte[height * stride]; 
colorImageFrame.CopyPixels(new Int32Rect(x, y, width, height), pixels, stride, 0); 

은 이제하여 WriteableBitmap에 픽셀 버퍼를 작성할 수 : 소스 colorImageFrame이 BitmapSource는 또한이라고 가정하면, 당신은 이런 식으로 할 것 단지 같은 새 BitmapSource는, 작성 : 그러나

var targetBitmap = BitmapSource.Create(
    width, height, 96, 96, colorImageFrame.Format, null, pixels, stride); 

을 수 있습니다 소스 비트 맵의 ​​작물을 만들 수있는 가장 쉬운 방법은 CroppedBitmap리터를 사용하는 이 :

var targetBitmap = new CroppedBitmap(
    colorImageFrame, new Int32Rect(x, y, width, height)); 
+0

감사합니다. Clemns, 구현을 위해 노력해야 했으므로 지금까지는 건설적인 의견을 제시 할 수 없었습니다. CroppedBitmap 메서드를 사용하여 내 문제를 해결했습니다. 다시 한번 감사드립니다 :) – DNRN