Действительно запутался с setPreviewCallback в Android, нужен совет

Я создаю приложение на Android, чтобы снимать кадры с камеры, обрабатывать их, а затем отображать рамку на поверхностиView, а также рисовать SurfaceView через холст и рисовать карту и все.

Просто проверить, является ли SurfaceView и Bitmaps and Canvas лучшим способом сделать это? Я за скоростью.

Предполагая, что ответ на вышеизложенное есть Да, вопрос будет следующим: где я должен поместить следующую функцию

camera_object.setPreviewCallback(new PreviewCallback() public void onPreviewFrame(byte[] data, Camera camera){ 

Должен ли я поместить его в onCreate () или разместить его в методе surfaceCreated () или surfaceChanged ()?

Я объявил свой основной класс активности следующим образом:

 public class MainActivity extends Activity implements SurfaceHolder.Callback, Camera.PreviewCallback { 

И в этом классе Eclipse заставляет меня создать функцию переопределения для onpreviewframe в классе MainActivity следующим образом

 public void onPreviewFrame(byte[] data, Camera camera){ } 

Но он никогда не называется. Должен ли я попытаться использовать эту функцию? Лучше ли использовать его? Или это просто вещь Eclipse?

пожалуйста, порекомендуйте

Вы вызываете setPreviewDisplay () , startPreview () и setPreviewCallback (это) из приложения? Без этого вы не получите никаких вызовов onPreviewFrame (). Фактически, если вы используете SurfaceView, буферы предварительного просмотра обратного вызова являются копией фактических буферов, которые отображаются на экране. Поэтому, если вы хотите отобразить эти скопированные буферы, вам нужно создать новое представление и перезаписать его. Это было бы неэффективно. Я бы предложил использовать SurfaceTexture вместо этого и использовать обратный вызов onFrameAvailable для получения кадров, а затем рисовать и отображать вручную. Пример этого можно найти в коде PanoramaActivity стандартного приложения для камеры Android.

Без camera_object.setPreviewDisplay(surface_holder); Вы не можете получать обратные вызовы камеры; Не забывайте также

 surface_view.setVisibility(View.VISIBLE); surface_holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

Вы можете скрыть предварительный просмотр камеры под другим видом; На 3.0 и выше вы даже можете вытолкнуть поверхность из экрана (отобразите ее внизу внизу экрана). Я не уверен, что последний трюк работает на 2.3.6.

Intereting Posts
Совместное использование изображения с помощью приложения Google+ с использованием Intent.ACTION_SEND и Intent.EXTRA_STREAM На Android KitKat можно ли оверлейное представление заполнить весь экран? Android WebView – контент не редактируемый Изображения, добавленные в программу AnimationDrawable для программной утечки RecyclerView LinearLayout manager всегда возвращает -1 в ландшафтном режиме – findLastCompletelyVisibleItemPosition () Тестирование RxJava2 с использованием Espresso и получение исключения нулевого указателя, когда suscribeOn Заполнять Spinner динамически в android из текста редактирования Прозрачная строка состояния охватывает режим действия на Kitkat Как отобразить более трех уровней расширяемого вида списка? Как отображать большие объемы текста на Android Gcc disable -Wall флаг для определенных файлов / папок Отображать сообщение после установки пакета Как разбирать xml, хранящийся в строковой переменной? Где мы получаем ответ xml от веб-службы, которая имеет аутентификацию? Мое приложение недоступно для планшетного устройства в Google Play Android 4.3 BTLE как сервер: как начать рекламу?