2014-12-04 3 views
2

Я использую TextureView для CameraPreview, из-за разницы между отношением отображения и коэффициентом предварительного просмотра я использую textureView.setTransform (matrix) в onSurfaceTextureAvailable() для масштабирования предварительного просмотра. Когда мне нужен скриншот textureView, я использую textureView.getBitmap(), но в некоторых моделях смартфонов getBitmap() игнорирует масштабирование предварительного просмотра. Почему так происходит?textureview getbitmap игнорирует setTransform

ответ

2

Я обнаружил эту же проблему, когда мне нужно было предварительно обработать предварительный просмотр камеры перед ее отображением.

Похоже, что первоначальный захват камеры - это то, что выходит в getBitmap(), а не преобразованное представление, которое заканчивается показом.

Я работал вокруг проблемы со следующим, который просто применяет ту же преобразование после Bitmap вытягивается:

TextureView textureView = (TextureView) findViewById(R.id.texture); 
Matrix m = new Matrix(); 
// Do matrix creation here. 
textureView.setTransform(m); 

// When you need to get the Bitmap 
Bitmap bitmap = textureView.getBitmap(); 
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), textureView.getTransform(null), true); 

Я заметил, что Bitmap не обрезаны, как это может быть в оригинале Посмотреть. В моем случае TextureView обрезал верх и низ изображения, в то время как битмап был по-прежнему в полном размере. В принципе, похоже, что TextureView использует эквивалент «centerCrop» для отображения исходного источника по умолчанию. Я установил свой соответствующий ImageView для использования android:scaleType="centerCrop", и представления имеют тот же аспект.

Конечно, это означает, что я обрабатываю больше изображения, которое мне действительно нужно, но я не разработал, как вырезать именно то, что делает TextureView перед обработкой.

Смежные вопросы