Frage

Ich frage mich, wie schnell ich Bilder einer nach dem anderen withoud Überraschungen aus dem Telefon nehmen kann (wie fx: ‚Kraft schließen;)

Hat jemand von euch wissen, dass die Zeit?

Ich weiß, dass 500 in ms sicher Zeit. Wenn ich mit 100, 200, 300 in ms experimentieren gibt es Fehler, aber wer weiß, vielleicht etw falsch ich tun.

War es hilfreich?

Lösung

Das hängt ganz auf das, was Sie definieren als „ein Bild machen“ - wie Nathan erwähnt, als Video-Aufzeichnung (im Grunde eine Reihe von abgespeckte, komprimierte Bilder) Sie können „take“ ein Bild alle 30 ms. Aber wenn Sie „die ein Bild“, wie das Kopieren einer 5MP JPEG Bild auf die SD-Karte zu definieren, wird dies wahrscheinlich länger dauern.

Sie müssen explizit beschreiben, was Sie meinen, wenn Sie sagen, „nur eine Schleife (1000 Bilder nehmen),“ vor allem, wenn Sie von Fehlern beschweren.

Unter der Annahme, erweitern Sie den Camera.PictureCallback Schnittstelle, eine Menge die Verarbeitung geht hinter den Kulissen auf, bevor Sie das Bild übergeben bekommen (wie JPEG-Komprimierung, glaube ich). Haben Sie versucht, eine Veranstaltung in Ihrer Implementierung von onPictureTaken werfen ein anderes Bild zu nehmen? Dies könnte eine sichere Art und Weise zu tun und zu testen, was Sie wollen. Andernfalls, wenn Sie eine Tonne „ein Bild“ Ereignisse abfeuern, könnte eine Art von Heap-Überlauf passieren, ich weiß es nicht.

Edit: Grob gesagt, das ist, was ich meinte:

public void onPictureTaken(
        final byte [] data, final android.hardware.Camera camera) {
    saveDataToFile("/DCIM/tempjpeg.jpg", data);
    camera.takePicture(null, null, this);
}

Anruftakepicture so schnell wie möglich - direkt im Rückruf! DO NOT USE THIS ohne Modifikation, für immer, da dies Schleife. Ich habe versucht, diese, und es funktioniert für ein paar Bilder, dann reagiert einfach aufhört. Wenn Sie es nach zwei Bildern zu stoppen, scheint es unter einer Sekunde auf einem Nexus One zu nehmen. Hoffnungen, das hilft.

Andere Tipps

Wäre das wirklich auf dem Gerät, das Sie tatsächlich abgesehen von den Software-Problemen verwenden. Ich würde nur die Tests am Telefon laufen, indem sie automatisch eine festgelegte Anzahl von Aufnahmen (wie 1000), Timing ihnen und bei der Suche durchschnittliche Zeit und die Standardabweichung von dem. Dadurch, dass auf ein paar Geräte und den Emulator würden Sie auf jeden Fall ein Gefühl dafür, wie lange es tatsächlich dauert.

Nun das Motorola DROID 30fps Video nehmen, wenn Sie also wirklich schnell Bilder, vielleicht könnten Sie MediaRecorder verwenden

boolean isTakingPicture = false;


public void onclick2takepic(View view) {
      try {
        if(!isTakingPicture) {
            mCamera.takePicture(null, null, mPicture);
            isTakingPicture = true;
        }else{
            isTakingPicture=false;
        }
    }catch(Exception e){
        Toast.makeText(this,"cannot take picture: "+e.getMessage(),Toast.LENGTH_SHORT).show();
    }
}


    private Camera.PictureCallback mPicture = new Camera.PictureCallback(){
    @Override
public void onPictureTaken(byte[] data, Camera camera){
        File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
        if(pictureFile==null){
            Toast.makeText(getApplicationContext(),"error creating media file, check permissions",Toast.LENGTH_LONG).show();
            return;
        }
        try{
            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.close();
        }catch(FileNotFoundException e){
            //Toast.makeText(this,"file not found: "+e.getMessage()).show();
        }catch(IOException e){
            //Toast.makeText(getApplicationContext(),"error accessing file: "+e.getMessage()).show();
        }
        //isTakingPicture = false;
        mCamera.startPreview();
        if(isTakingPicture) {
            mCamera.takePicture(null, null, mPicture);
        }
    }
};

In diesem Code gibt es eine Rekursion, dass Neustarts Vorschau und nimmt Bild wieder so lange wie isTakingPicture = true; Drehen Vorschau ein- und ausgeschaltet ist zeitaufwendig, so dass ich mehr als ein paar Bilder pro Sekunde auf meinem alten Telefon erhalten kann nicht. möchte in der Lage sein, dies durch Takepicture nicht zu tun, wie es ohne Vorschau schießen kann nicht aber mit mediaRecorder aber keine Ahnung, wie noch

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top