我正在使用SurfaceTexture繪製相機的預覽圖,並且需要知道紋理的大小+在此過程中發生了什麼。SurfaceTexture大小,它是如何定義的?
比方說由設備所支持的相機預覽大小爲:
1280 720 1024 576 960 720 800 600 800 480 768 576 736 552等。
很明顯,有這些尺寸和標準的紋理尺寸之間的不匹配2048×2048,2048×1024,1024×1024 ...
我能想到下面跟隨的情況,但我不確定:
1,表面紋理是在選擇的預覽大小,例如1280×720的大小,但是這不是POW2格式和可能意味着兼容性問題
2,表面紋理被包含的下一尺寸內pow2格式,未轉換,例如1280x720將包含在2048 x 1024的紋理內,沒有拉伸,部分紋理保持未使用狀態。
3,表面紋理的尺寸至多適合下一POW2質地(甚至尺寸下),圖像的比例都將丟失,也質量受到影響。例如1920 x 1080橫跨2048 x 2048.
4,其他一些可能性?
相機預覽如何映射到紋理以及最終定義的紋理大小如何?
我猜想它可以是三個中的任何一個,具體取決於供應商的具體實現。您應該使用SurfaceTexture.getTransformMatrix來獲取紋理座標(s,t)的映射。而且這種轉換可以爲每種情況做映射。 – harism
感謝您的想法。我問的原因是因爲我在路上的某處失去了質量,與庫存相機相比。我得到了稍微鋸齒狀的邊緣,就好像它經歷了其他有損變形(是的,我正在使用線性濾波器)。也許我的1280x720預覽大小是通過1024px的紋理。如果我有辦法檢查紋理的大小,它可以確認它的真實與否。我之前檢查過getTransformMatrix以及opengl投影,並且這些似乎沒有任何相對轉換(所有(s,t)座標爲1或0) – Jayco