Wie man den Burst-Modus zur Kamera zur Verfügung stellt

Ich versuche, eine kleine Foto-App mit einem Burst-Modus für Kamera zu bauen. Die Hauptidee ist, alle 0,3 Sekunden ein Bild zu drehen und die Bilder in einem Array zu speichern, bis das letzte Bild aufgenommen ist. Die Anzahl der zu schießenden Bilder sollte angegeben werden.

Ich kann nur ein Bild alle 2 Sekunden schießen. Als kürzestes Intervall. Dann, wenn die Bilder in die Speicherung geschrieben werden sollen, kratzt die Anwendung.

  • Android zuletzt letzte Zeit für die Datei eingestellt
  • Ist es möglich, folgende Umleitungen in OkHttp 2.0 zu deaktivieren?
  • Wie ändere ich die Schriftgröße von tabhost in android
  • So entfernen Sie den unveröffentlichten Apk aus dem Google Play Console Account
  • Wie kann ich Indoor-Standorte verfolgen?
  • Android L | Libusb_init gibt LIBUSB_ERROR_OTHER (-99) zurück
  • Weiß jemand, wie man das implementiert? Hier ist mein Code:

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.PixelFormat; 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.view.Window; import android.view.WindowManager; import android.view.View.OnClickListener; public class CamaeaView extends Activity implements SurfaceHolder.Callback, OnClickListener { static final int FOTO_MODE = 1; private static final String TAG = "Test"; Camera mCamera; boolean mPreviewRunning = false; private Context mContext = this; ArrayList<Object> listImage = null; public static ArrayList<Object> List1[]; public void onCreate(Bundle icicle) { super.onCreate(icicle); Log.e(TAG, "onCreate"); @SuppressWarnings("unused") Bundle extras = getIntent().getExtras(); getWindow().setFormat(PixelFormat.TRANSLUCENT); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera); mSurfaceView.setOnClickListener(this); mSurfaceHolder = mSurfaceView.getHolder(); mSurfaceHolder.addCallback(this); mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { public void onPictureTaken(byte[] imageData, Camera c) { Log.d("Start: ","Imagelist"); Intent mIntent = new Intent(); listImage.add(StoreByteImage(imageData)); SaveImage(listImage); mCamera.startPreview(); setResult(FOTO_MODE, mIntent); finish(); } }; protected void onResume() { Log.d(TAG, "onResume"); super.onResume(); } protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } protected void onStop() { Log.e(TAG, "onStop"); super.onStop(); } public void surfaceCreated(SurfaceHolder holder) { Log.d(TAG, "surfaceCreated"); mCamera = Camera.open(); } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { Log.d(TAG, "surfaceChanged"); // XXX stopPreview() will crash if preview is not running if (mPreviewRunning) { mCamera.stopPreview(); } Camera.Parameters p = mCamera.getParameters(); p.setPreviewSize(w, h); p.setPictureSize(1024, 768); p.getSupportedPictureFormats(); p.setPictureFormat(PixelFormat.JPEG); mCamera.setParameters(p); try { mCamera.setPreviewDisplay(holder); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mCamera.startPreview(); mPreviewRunning = true; } public void surfaceDestroyed(SurfaceHolder holder) { Log.e(TAG, "surfaceDestroyed"); mCamera.stopPreview(); mPreviewRunning = false; mCamera.release(); } private SurfaceView mSurfaceView; private SurfaceHolder mSurfaceHolder; public void onClick(View arg0) { int i = 0; while (i < 4) { mCamera.takePicture(null, mPictureCallback, mPictureCallback); i = i + 1; try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static Object StoreByteImage(byte[] imageData) { Object obj = null; try { ByteArrayInputStream bis = new ByteArrayInputStream(imageData); ObjectInputStream objImageData = new ObjectInputStream(bis); obj = objImageData.readObject(); } catch (IOException ex) { // TODO: Handle the exception } catch (ClassNotFoundException ex) { // TODO: Handle the exception } return obj; } public static Object createImagesArray(byte[] imageData) { Object obj = null; try { ByteArrayInputStream bis = new ByteArrayInputStream(imageData); ObjectInputStream objImageData = new ObjectInputStream(bis); obj = objImageData.readObject(); } catch (IOException ex) { // TODO: Handle the exception } catch (ClassNotFoundException ex) { // TODO: Handle the exception } return obj; } public static boolean SaveImage(List<Object> listImage) { FileOutputStream outStream = null; Log.d("ListSize: ", Integer.toString(listImage.size())); Iterator<Object> itList = listImage.iterator(); byte[] imageBytes = null; while (itList.hasNext()) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(listImage); oos.flush(); oos.close(); bos.close(); imageBytes = bos.toByteArray(); } catch (IOException ex) { // TODO: Handle the exception } try { // Write to SD Card outStream = new FileOutputStream(String.format( "/sdcard/DCIM/%d.jpg", System.currentTimeMillis())); // <9> outStream.write(imageBytes); outStream.close(); } catch (FileNotFoundException e) { // <10> e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } } Log.d(TAG, "onPictureTaken - jpeg"); return true; } } 

    Fehler aus den Kommentaren:

     ERROR/MemoryHeapBase(1382): error opening /dev/pmem_camera: No such file or directory ERROR/QualcommCameraHardware(1382): failed to construct master heap for pmem pool /dev/pmem_camera ERROR/QualcommCameraHardware(1382): initRaw X failed with pmem_camera, trying with pmem_adsp 

  • Android AVD startet nicht
  • Wie kann ich veröffentlichen, um die x86 und ARM apks meiner Cordova-Crosswalk App zu speichern?
  • Wie zentriere ich Text horizontal und vertikal in einem TextView auf Android?
  • Wo finde ich API Key und API Geheimnis für Facebook?
  • Wie zeigt man "Sliding Menu" auf Activity Launch?
  • Dynamisch aktivieren / deaktivieren ausblenden / ausblenden Android ActionBar Aktionssymbol
  • 2 Solutions collect form web for “Wie man den Burst-Modus zur Kamera zur Verfügung stellt”

    AFAIK, du kannst kein anderes Bild machen, bis das erste fertig ist. Eliminiere deine for loop und Thread.sleep() . Nimm das nächste Bild in mPictureCallback .

    Die Hauptidee ist, alle 0,3 Sekunden ein Bild zu drehen und die Bilder in einem Array zu speichern, bis das letzte Bild aufgenommen ist.

    Das Ziel "0,3sec" ist schneller als die meisten Geräte können ein Bild verarbeiten, und Sie haben möglicherweise nicht genug Haufen Platz für Ihre Reihe von Bildern. Ich vermute, dass du jedes Bild auf die Festplatte schreiben AsyncTask , da es über eine AsyncTask , also kannst du den Haufenraum AsyncTask und dabei auch den AsyncTask nicht anbinden.

    Sie können versuchen, nachfolgende Vorschaubilder in vorab zugewiesenen Byte-Arrays zu erfassen. Siehe folgende Methoden:

    http://developer.android.com/reference/android/hardware/Camera.html#addCallbackBuffer (Byte []) http://developer.android.com/reference/android/hardware/Camera.html#setPreviewCallbackWithBuffer(android. Hardware.Camera.PreviewCallback)

    … oder http://developer.android.com/reference/android/hardware/Camera.html#setOneShotPreviewCallback(android.hardware.Camera.PreviewCallback) für eine bessere Kontrolle über das Timing.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.