Масштабирование и вращение текстуры преобразования матрицы одновременно - PullRequest
0 голосов
/ 16 сентября 2018

Начиная с примеров графики, я пытаюсь захватить поток с камеры в файл. Перед кодированием мне нужно применить несколько преобразований:

  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. Применить шкалу и перевод

Изображение сжимается вдоль одной оси. Поэтому я должен масштабировать вдоль этой оси, а затем немного перевести, чтобы мы увидели среднюю часть. Опять же, я могу сделать это следующим образом:

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);

Перевод состоит в том, чтобы получить 'центральную обрезку' в конечном результате, поскольку кодер будет захватывать только то, что нарисовано в данном окне просмотра.

Тем не менее, я теряюсь при объединении двух операций вместе. Я потратил несколько часов на это, и то, что я исследовал, не помогло. Кто-нибудь может понять это?

...