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.

questionAnswers(7)

yourAnswerToTheQuestion