2013-04-26 36 views
6

我正在爲Windows Phone 8創建一個AR鏡頭。我玩過鏡頭和相機功能,這一切都很好。我可以在屏幕上放置圖標和圖片,並處理使用手機拍攝的照片。但我需要做的是能夠在拍攝之前實時讀取相機屏幕。Windows Phone 8鏡頭增強現實

示例:Face Lens必須掃描現場屏幕,檢查我假設的像素,以計算某人的鼻子/眼睛等位置是否要在實時相機屏幕上放置小丑鼻子或眼鏡等。

我可以用圖片做到這一點,但似乎無法找到訪問攝像頭中當前幀的方式,而無需拍攝照片。基本上,我會想要掃描每個相機應用程序中顯示的每個像素。我知道這是可能的,其他鏡頭可以做到這一點,但我應該在哪裏找到正確的方法來訪問它。

回答

5

這當然是可能的。這樣做的關鍵是使用PhotoCamera.GetPreviewBufferArgb32()函數。

其基本思想是從PhotoCamera對象中獲取預覽緩衝區。這是這樣做的:

int[] pixelData = new int[(int)(camera.PreviewResolution.Width * camera.PreviewResolution.Height)]; 
camera.GetPreviewBufferArgb32(pixelData); 
return pixelData; 

這會得到一個未壓縮的.bmp-like圖片。然後,您可以訪問該數據來識別功能,或將其他對象繪製到其中。

修改數據後,把它推到一個WriteableBitmap()像這樣顯示的:

int[] previewBuffer = GetPreviewBuffer(); 
pixelData.CopyTo(previewWriteableBitmap.Pixels, 0); 
previewWriteableBitmap.Invalidate(); 

免責聲明:這其中大部分是從Live Camera example過微軟採取。請務必查看Greyscale Camera example,特別是處理與捕獲圖片相關的事件。

+1

Excellant的答案,到處搜索一個樣本,但沒有提出任何事情。非常感激。 – anothershrubery 2013-05-07 08:12:02

+0

謝謝,不客氣! – likeitlikeit 2013-05-07 10:57:40