3

グラフィカの例から始めて、カメラストリームをファイルにキャプチャしようとしています。エンコードする前に、いくつかの変換を適用する必要があります。

  1. 画像を回転する

私がすることができます:

Matrix.translateM(transform, 0, 0.5F, 0.5F, 0);
Matrix.rotateM(transform, 0, rotation, 0, 0, 1);
Matrix.translateM(transform, 0, -0.5F, -0.5F, 0);
  1. スケールと平行移動を適用する

画像は 1 つの軸に沿って圧縮されます。そのため、中央部分が見えるように少し移動するよりも、その軸に沿ってスケーリングする必要があります。繰り返しますが、次のようにこれを行うことができます。

float scaleX = mScaleX; // < 1 or == 1
float scaleY = mScaleY; // < 1 or == 1
float scaleTranslX = (1F - scaleX) / 2F;
float scaleTranslY = (1F - scaleY) / 2F;
Matrix.translateM(transform, 0, scaleTranslX, scaleTranslY, 0);
Matrix.scaleM(transform, 0, scaleX, scaleY, 1);

変換は、エンコーダーが指定されたビューポートに描画されたもののみをキャプチャするため、最終結果で「中央のトリミング」を取得することです。

しかし、私は 2 つの操作を組み合わせることに迷っています。私はこれに数時間を費やしましたが、調査したことは役に立ちませんでした. 誰でもこれを理解できますか?

4

0 に答える 0