2012-01-09 72 views
8

我正在寫一個小型的android應用程序,用戶可以在相機的實時預覽中放置一個圖像並拍攝這張照片。該應用程序將適當地合併這兩個圖像 - 所有這些工作正常。Android如何處理預覽大小/比例與實際SufaceView大小之間的差異?

我知道你可以使用Camera.getParameters()獲取/設置PreviewSize,我認爲這與實時「攝像頭饋送」的大小有關。

但是,顯示相機預覽的SurfaceView的大小與報告的(和使用的)PreviewSizes不同。例如,在模擬器中,我可用的SurfaceView碰巧是360x215,而PreviewSize是320x240。儘管如此,整個SurfaceView仍然充滿了預覽。

但是最終生成的圖片是(也?)320x240。 android如何彌補這些尺寸和寬高比的差異?圖像是否被截斷?

或者我只是誤解了PreviewSize是關於什麼 - 這是與生成的圖片的大小有關,還是它與投影在SurfaceView上的「實時預覽」有關?是否有任何非平凡的相機示例處理這個問題?

我需要知道如何進行轉換,最終將圖像正確地複製/縮放到照片中,因此會出現這些問題。

+0

你可能想看看我的答案我自己的一個類似的問題:http://stackoverflow.com/a/18159351/994834 – goto10 2013-08-10 21:39:06

回答

1

我想弄明白自己。以下是我發現了迄今..

  • 表面視圖有稱爲mSurface的內表面,其實際上被用作相機饋送和編碼器進料。所以這個緩衝區必須是你想要進行記錄的實際大小。
  • 您可以通過使用setFixedSize方法
  • 現在設置這個mSurface的大小獨立於SurfaceView的你可能要進行高清拍攝,因此mSurface需要1280x760的分辨率,但你SurfaceView不能是大(假設你正在使用WVGA屏幕的手機上運行它)。所以你試圖設置一個比1280x760更小的分辨率,它也保持相同的寬高比。
  • Android現在執行的HD緩衝器,以獲得預覽分辨率的調整大小,裁剪不這樣做,它只是調整到SurfaceView reoslutions
  • 所以在這一點無論是mSurface和您設置在相機上的previewSize是相同的分辨率,因此得到的視頻記錄也將具有相同的分辨率。

這就是說我仍然努力讓我的VGA記錄器在Nexus S上工作,它正在使用LG Maha設備。 :)