Android - Nehmen Sie das Bild ohne Vorschau
Ich versuche, um ein Bild ohne Vorschau sofort, wenn meine Anwendung gestartet wird und danach das Bild speichern in neuen folder - "pictures123", in den root-Ordner.
Könnte mir bitte jemand sagen, was falsch in meinem code?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File directory = new File(Environment.getExternalStorageDirectory() + "/pictures123/");
if (!directory.exists()) {
directory.mkdir();
}
Camera camera = Camera.open(0);
Camera.Parameters parameters = camera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG);
camera.setParameters(parameters);
SurfaceView mview = new SurfaceView(getBaseContext());
camera.setPreviewDisplay(mview.getHolder());
camera.setPreviewDisplay(null);
camera.startPreview();
camera.takePicture(null,null,photoCallback);
camera.stopPreview();
}
Camera.PictureCallback photoCallback=new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
try {
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/pictures123");
File file = new File (myDir, "pic1.jpeg");
FileOutputStream out = new FileOutputStream(file);
out.write(data);
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e)
{
e.printStackTrace();
}
finish();
}
};
Berechtigungen:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
- Möglich, Duplikat der Wie man Bilder von der Kamera, ohne die Vorschau, wenn meine app gestartet wird?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht nehmen Sie ein Bild ohne Vorschau, aber Sie nicht haben, um zu zeigen, das Vorschaubild auf dem Bildschirm. Sie können die Ausgabe in eine SurfaceTexture statt (API 11+).
Sehen diese Antwort für mehr details.
Wenn Sie Camera 2 API, Bild heimlich ohne Vorschau oder beim Mittagessen Gerät die Kamera-app können Sie überprüfen, mein Projekt auf github.
https://github.com/botyourbusiness/android-camera2-secret-picture-taker
Hoffe, dass hat geholfen 🙂
Ich denke, das Hauptproblem ist, dass Sie anrufen takePicture sofort nach startPreview die eigentlich braucht Zeit, um seine Konfiguration vervollständigen. So das hinzufügen einer Verzögerung zwischen den beiden könnte vorübergehend dieses Problem zu beheben, schauen Sie hier für mehr details.
camera.setPreviewDisplay(null)
ohne Verzögerung helfen wird (nun, es gibt einige Geräte, die es ermöglichen, solche ricks). Beachten Sie auch, dass Verzögerung kann nicht einfachSleep()
rufen hier und dort. Der Fluss der Kamera-Initialisierung beinhaltet einige Rückrufe und erfordert eine schnelle Reaktion auf diese. E. g. man nicht SurfaceHolder vor derSurfaceView
genannt hatSurfaceCreated()
auf seine Zuhörer.Es ist unmöglich, ein Bild ohne Vorschau. Lesen Sie die Android-online-Referenz: http://developer.android.com/reference/android/hardware/Camera.html#takePicture.
Hinweis:
Diese Methode ist nur gültig, wenn die Vorschau aktiv ist (nach startPreview()). Album Vorhören wird gestoppt, nachdem das Bild aufgenommen; Anrufer anrufen müssen, startPreview() erneut, wenn Sie möchten, starten Sie erneut eine Vorschau oder nehmen Sie mehr Bilder. Dies sollte nicht aufgerufen werden, die zwischen start() und stop().