Начиная с примеров графики, я пытаюсь захватить поток с камеры в файл. Перед кодированием мне нужно применить несколько преобразований:
- Поворот изображения
Я могу сделать это:
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);
- Применить шкалу и перевод
Изображение сжимается вдоль одной оси. Поэтому я должен масштабировать вдоль этой оси, а затем немного перевести, чтобы мы увидели среднюю часть.
Опять же, я могу сделать это следующим образом:
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);
Перевод состоит в том, чтобы получить 'центральную обрезку' в конечном результате, поскольку кодер будет захватывать только то, что нарисовано в данном окне просмотра.
Тем не менее, я теряюсь при объединении двух операций вместе. Я потратил несколько часов на это, и то, что я исследовал, не помогло.
Кто-нибудь может понять это?