Oooooookayyyyyy - Also, ich habe mir das Ganze nocheinmal durch den Kopf gehen lassen und alles etwas umgebaut. Die eigene Klasse der SurfaceView habe ich wieder zu Seite gepackt und wieder die SurfaceView aus der XML genommen. Beim starten der Preview rufe ich dann die setPreviewCallback auf in der ich dann auch die onPreviewFrame überschreiben kann. Die bitmap habe ich dann beim ersten Versuch an meine saveScreenshot(bmp) übergeben. ZUM GLÜCK HABE ICH GENÜGEN SPEICHER
- Schnell die App geschlossen und natürlich nicht die onDestroy() aufgerufen. Ergebnis = zuviele Images auf meine Phone.
Das Ganze nun via Button und ich bekomme auch Images mit Inhalt. Aber das sieht eher wie ein Gemälde eine Teens auf Speed aus....oder wie ein alter CRT Monitor dessen Kabel defekt ist.....
Normal ist das nicht oder?
Hier meine Codeäanderungen:
1@Override
2 public void onClick(View v) {
3 long ce = v.getId();
4
5 if (ce == R.id.open) {
6 if (!previewing) {
7 previewing = true;
8 camera = Camera.open();
9 if (camera != null) {
10 try {
11 camera.setPreviewDisplay(surfaceHolder);
12 camera.setDisplayOrientation(90);
13 camera.setPreviewCallback(new PreviewCallback() {
14
15 @Override
16 public void onPreviewFrame(byte[] data, Camera camera) {
17 System.out.println("Bin drin");
18 int[] rgb = decodeYUV420SP(data, 400, 240);
19 bmp = Bitmap.createBitmap(rgb, 400, 240, Bitmap.Config.ARGB_8888);
20 //saveScreenshot(bmp);
21 }
22 });
23 camera.startPreview();
24 } catch (Exception e) {
25 e.printStackTrace();
26 }
27 }
28 }
29 } else if (ce == R.id.capture) {
30 saveScreenshot();
31 }
32
33 }
und
1public void saveScreenshot() {
2
3 File file = new File(mScreenshotPath + "/" + System.currentTimeMillis()
4 + ".jpg");
5 FileOutputStream fos;
6 try {
7 fos = new FileOutputStream(file);
8 bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
9 fos.close();
10 } catch (Exception e) {
11 // TODO: handle exception
12 }
13 }
EDIT: Da warst Du wohl schneller mit dem Schreiben... Also, ich brauche einen Screenshot von der Camera Preview inkl. der Overlays. Habe es die Tage so gelöst, dass ich parallel ein Foto über die Camera aufnehme und einen Screenshot der Overlays. Diese habe ich dann jeweils in ein BitmapArr gespeichert um sie später mittels einer for-Schleife und Canvas zu einem Bild zusammen zufügen. Das hat auch super geklappt, nur ist die Camera einfach zu langsam und es gibt immer wieder Probleme mit OutOfMemoryError. Und ich habe Probleme, beide Bilder sauber in einer Größe auszugeben auf eine Bitmap zu bringen, also so, als sei es wirklich ein Screenshot.... Daher der weg, einen Screenshot von der Camera Preview zu machen anstatt ein Foto aufzunehemen und weiterzuverarbeiten....
— geändert am 26.08.2012, 03:04:56