2012-10-07 114 views
0

我在實現自定義攝像頭視圖時遇到困難。自定義攝像頭視圖

我想要實現的任務是 - 在相機預覽中我有一個預覽圖片(在previewcallback函數中)。 我放大它,然後我想在相機視圖中繪製圖像的縮放版本。

在previewcallback函數中,我將圖像像素值作爲字節數組獲取。但是在canvas.drawImage中,它接受int數組。任何人都可以建議我像素數據組織在previewcallback函數內的字節數組中嗎?

我試圖鎖定surfaceview,但它沒有幫助。它返回null,所以我不能在該表面上繪製任何東西。

有什麼建議嗎? 謝謝。

回答

1

如前所述,NV21是默認設置,必須始終提供 - 這意味着您可以依賴它,如果您希望與其他設備兼容,則可以依靠它。至於鎖定表面視圖 - 您用於預覽的表面視圖對於您來說是不受限制的,因爲它已經被相機應用鎖定(這是本機並在自己的進程中運行) - 如果您想使用它,您將不得不停止預覽它使相機應用程序釋放此表面(希望)

壞消息是,您不能將第一個頂部的表面視圖與框架佈局 (這是表面視圖的限制,它們不能重疊),但良好消息是,你可以將圖像視圖oevr它有畫位圖(通過runOnuiThread()

你可以找到例子,如何做到這一點在我們的javaOCR project

(請參閱android demo,請使用git repo,因爲它是最新的)

+0

我的猜測和你的相似。該表面視圖已被本機相機進程鎖定。 所以,我試圖使用第二種方法並失敗(SurfaceView over SurfaceView);因爲它不能正常工作。 我認爲根據您的建議可以通過使用ImageView複製類似的效果。感謝那些信息,我會盡力而爲。 – fadedreamz

2

來自預覽回調的像素數據的組織方式取決於您的預覽格式設置爲什麼。默認情況下,它是NV21,這是Android設備中兼容性最高的選項。例如,您可以找到有關此格式here的更多詳細信息。

但是粗略地說,圖像數據是YCbCr格式 - 不是畫布想要的更常見的RGB顏色編碼。你需要

  1. 轉換將YCbCr字節值到RGB值(公式可以在Wikipedia找到)
  2. 上取樣Cb和Cr(顏色)渠道進入全分辨率;它們已經縮小到Y(亮度)通道的寬度和高度的1/2。最簡單的選擇是使用最近鄰居上採樣 - 對4個不同的Y值使用相同的Cb和Cr值。所以你可以將Cb和Cr通道的像素(0,0)與Y通道的像素(0,0),(1,0),(0,1)和(1,1)配對以形成全分辨率圖像。
+0

感謝您的信息,我將首先嚐試使用YCbCr轉換爲RGB轉換公式。 – fadedreamz

相關問題