Podgląd kamery kadrowania dla TextureView
Mam TextureView ze stałą szerokością i wysokością i chcę pokazać podgląd kamery wewnątrz niego. Muszę przyciąć podgląd kamery, aby nie był rozciągnięty wewnątrz mojego TextureView. Jak zrobić kadrowanie? Jeśli muszę użyć OpenGL, jak powiązać chropowatość powierzchni z OpenGL i jak zrobić przycinanie za pomocą OpenGL?
public class MyActivity extends Activity implements TextureView.SurfaceTextureListener
{
private Camera mCamera;
private TextureView mTextureView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_options);
mTextureView = (TextureView) findViewById(R.id.camera_preview);
mTextureView.setSurfaceTextureListener(this);
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mCamera = Camera.open();
try
{
mCamera.setPreviewTexture(surface);
mCamera.startPreview();
} catch (IOException ioe) {
// Something bad happened
}
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
mCamera.stopPreview();
mCamera.release();
return true;
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface)
{
// Invoked every time there's a new Camera preview frame
}
}
Ponadto, po prawidłowym wykonaniu podglądu, muszę być w stanie odczytać w czasie rzeczywistym piksele znalezione w środku przyciętego obrazu.