Отобразите прямоугольный ограничивающий прямоугольник (наложение) в пользовательском API Camera2, чтобы захватывалось только изображение внутри рамки

Это должно значительно упростить вещи:

library('ggthemes')
ggplot(mtcars, aes(mpg, hp)) + geom_point() + facet_wrap(~carb, scales='free') + 
    theme_tufte() + theme(axis.line=element_line()) + 
    scale_x_continuous(limits=c(10,35)) + scale_y_continuous(limits=c(0,400))

enter image description here [/g0]

1
задан James Z 5 March 2019 в 17:37
поделиться

1 ответ

Внутри вашего объекта onImageAvailableListener создайте объект BitmapRegionDecoder. Этот объект принимает прямоугольный объект. Прямоугольник создан так, что он содержит только границы ImageView. Не начинайте новое действие, просто чтобы показать ImageView поверх вашего TextureView. просто добавьте изображение-представление в ваш activity_main.xml. Убедитесь, что вы установили высоту и ширину вида изображения на некоторое действительное число в единицах dp.

Чтобы создать прямоугольник, который будет содержать только границы вашего изображения-представления, создайте объект метрик отображения и запросите плотность устройства с объектами метрик. Итак, скажем, что ваши размеры просмотра изображения составляют 300dp = ширина и 200dp = высота, а плотность вашего устройства, возвращенная из объекта metrics = 2.0 ... Затем, умножьте 300 * 2.0 и 200 * 2.0, чтобы получить площадь ограничивающего прямоугольника просмотра изображения на основе на плотность вашего устройства. Поскольку вы используете camera2 API, вы должны знать, какая область предварительного просмотра основана на запросе конфигурации SCALER. Используя эту известную область и область просмотра изображений, вы создаете прямоугольник, находя центральную точку (убедитесь, что центр вашего фактурного обзора совпадает с вашим центром просмотра изображений. Установите layout_gravity = center в xml), а затем с помощью некоторой базовой математики вы можете вычтите и добавьте половину ширины и половину высоты представления изображения, чтобы создать объект прямоугольника, в котором нуждается объект BitmapRegionDecoder. Просто передайте null для параметра options, необходимого в объекте BitmapRegionDecoder. Вы должны получить обратно несколько байтов от объекта декодера, который затем можете превратить в растровое изображение по вашему выбору.

0
ответ дан i_o 5 March 2019 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: