Учебное пособие для камеры для Android (с использованием поверхностного обзора)

Вот мой пример кода:

package newslab.video.server; import android.app.Activity; import android.hardware.Camera; import android.os.Bundle; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.Button; import android.widget.TextView; public class VideoServer extends Activity implements SurfaceHolder.Callback { TextView testView; Camera camera; SurfaceView surfaceView; SurfaceHolder surfaceHolder; private final String tag = "VideoServer"; Button start, stop; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); start = (Button)findViewById(R.id.btn_start); start.setOnClickListener(new Button.OnClickListener() { public void onClick(View arg0) { start_camera(); } }); stop = (Button)findViewById(R.id.btn_stop); stop.setOnClickListener(new Button.OnClickListener() { public void onClick(View arg0) { stop_camera(); } }); surfaceView = (SurfaceView)findViewById(R.id.surfaceView1); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } private void start_camera() { try{ camera = Camera.open(); }catch(RuntimeException e){ Log.e(tag, "init_camera: " + e); return; } Camera.Parameters param; param = camera.getParameters(); //modify parameter param.setPreviewFrameRate(20); param.setPreviewSize(176, 144); camera.setParameters(param); try { camera.setPreviewDisplay(surfaceHolder); camera.startPreview(); } catch (Exception e) { Log.e(tag, "init_camera: " + e); return; } } private void stop_camera() { camera.stopPreview(); camera.release(); } public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub } public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub } } 

Однако он просто показывает предварительный просмотр и останавливает камеру.
Есть ли какой-либо другой учебник для обучения дальнейшей обработке, например, как сохранить изображение или обработать изображение с помощью растрового изображения?

ОК. Итак, вот решение:

Я не добавляю попытку поймать. Это просто для захвата изображения и сохранения его в SD-карте.

 public class VideoServer extends Activity implements SurfaceHolder.Callback { TextView testView; Camera camera; SurfaceView surfaceView; SurfaceHolder surfaceHolder; PictureCallback rawCallback; ShutterCallback shutterCallback; PictureCallback jpegCallback; private final String tag = "VideoServer"; Button start, stop, capture; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); start = (Button)findViewById(R.id.btn_start); start.setOnClickListener(new Button.OnClickListener() { public void onClick(View arg0) { start_camera(); } }); stop = (Button)findViewById(R.id.btn_stop); capture = (Button) findViewById(R.id.capture); stop.setOnClickListener(new Button.OnClickListener() { public void onClick(View arg0) { stop_camera(); } }); capture.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub captureImage(); } }); surfaceView = (SurfaceView)findViewById(R.id.surfaceView1); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); rawCallback = new PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { Log.d("Log", "onPictureTaken - raw"); } }; /** Handles data for jpeg picture */ shutterCallback = new ShutterCallback() { public void onShutter() { Log.i("Log", "onShutter'd"); } }; jpegCallback = new PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { FileOutputStream outStream = null; try { outStream = new FileOutputStream(String.format( "/sdcard/%d.jpg", System.currentTimeMillis())); outStream.write(data); outStream.close(); Log.d("Log", "onPictureTaken - wrote bytes: " + data.length); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } Log.d("Log", "onPictureTaken - jpeg"); } }; } private void captureImage() { // TODO Auto-generated method stub camera.takePicture(shutterCallback, rawCallback, jpegCallback); } private void start_camera() { try{ camera = Camera.open(); }catch(RuntimeException e){ Log.e(tag, "init_camera: " + e); return; } Camera.Parameters param; param = camera.getParameters(); //modify parameter param.setPreviewFrameRate(20); param.setPreviewSize(176, 144); camera.setParameters(param); try { camera.setPreviewDisplay(surfaceHolder); camera.startPreview(); //camera.takePicture(shutter, raw, jpeg) } catch (Exception e) { Log.e(tag, "init_camera: " + e); return; } } private void stop_camera() { camera.stopPreview(); camera.release(); } public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub } public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub } } 

Не нажимайте кнопку caputure до начала , потому что я не проверял ее. Я просто хотел показать вам, как захватить и сохранить изображение в SD-карте .

Не забудьте принять разрешение на использование камеры в файле манифеста Android,

 <uses-permission android:name="android.permission.CAMERA" ></uses-permission> 

Также вы должны получить разрешение на хранение изображений на SD-карте,

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 

Разрешение камеры в manifiest файле:

 <uses-feature android:name="android.hardware.camera" /> <uses-permission android:name="android.permission.CAMERA" /> 

Разрешение на сохранение изображения из sdcard в manifiest файле:

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

У меня были проблемы с камерой, выяснение того, как реализовать и работать, и наткнулся на эти ресурсы: просмотр камеры . В нижней части страницы вы найдете примеры наиболее распространенных сценариев, а также один в своем исходном вопросе: Take and preview Photo

Intereting Posts
Android studio 2.0 Preview 8 с плагином 2.0.0-alhpa8, предупреждение о сохранении памяти, несмотря на размер кучи до 4 ГБ Ошибка Logcat: «addView (View, LayoutParams) не поддерживается в AdapterView» в ListView Воспроизведение нескольких звуков с помощью SoundManager Поддерживает ли «Samsung Apps» схему URI для перенаправления на конкретные приложения? Как подсчитать количество записей в sqlite в Android Android: gravity = "right" не работает на всех устройствах для арабского и других языков RTL Скрыть открытое действие телефона на пригодный для носки Как я могу указать имя цвета в шестнадцатеричном цветовом коде? Параметры Volley – POST / GET Преобразовать mm-dd-yyyy в yyyy-mm-dd Как я могу хранить географические данные в базе данных Android и запрашивать их? Android Emulator: выберите AVD (Android Virtual Device) для запуска по умолчанию Как я могу заставить диспетчер загрузки перезаписать существующий файл вместо того, чтобы переименовывать файл в android Что делать, если я хочу опубликовать обновление с более высоким значением minSDK, чем тот, который представлен на рынке? Инициализация Android AudioRecord терпит неудачу каждый раз