SurfaceView.getDrawingCache() from Camera

  • Antworten:16
ilyas i.
  • Forum-Beiträge: 61

09.12.2011, 14:58:23 via Website

Hallo Leute,

ich habe ein surfaceview, worauf ich den Preview von der Camera starte.

Ich möchte von diesem surfaceview den Inhalt bekommen. Das Problem ist aber, dass der Inhalt sozusagen komplett schwarz ist, also die Preview vom Camera wird mit surfaceView.getDrawingCache() nicht mitgenommen.

1camera.startPreview();
2surfaceView.buildDrawingCache();
3Bitmap bm = Bitmap.createBitmap(surfaceView.getDrawingCache());
4ByteArrayOutputStream baos = new ByteArrayOutputStream();
5bm.compress(Bitmap.CompressFormat.JPEG, 50, baos);


ich will den DrawingCache von der aktuellen Kamera-Anzeige.

Antworten
Jochen K.
  • Forum-Beiträge: 33

25.08.2012, 16:09:02 via Website

Hi,

hast Du mittlerweile eine Lösung gefunden? Ich bin bereits seit Tagen auf der Suche nach einer Lösung des selben Problems....

Das einzige was ich gefunden habe ist: http://dev.widemeadows.de/2011/11/02/android-bitmap-von-surfaceview-erzeugen/

Und dann noch http://www.droidnova.com/how-to-create-and-save-a-screenshot-from-a-surfaceview,880.html

Komme aber trotzdem nicht wirklich weiter. Ich habe gelesen, dass es scheinbar nicht möglich sein soll. Aber ich kann ja auch wenn die Camera Preview läuft einen Screenshot über Android machen....

Grüße

Antworten
ilyas i.
  • Forum-Beiträge: 61

26.08.2012, 00:59:33 via Website

Jochen K.
Hi,

hast Du mittlerweile eine Lösung gefunden? Ich bin bereits seit Tagen auf der Suche nach einer Lösung des selben Problems....

Das einzige was ich gefunden habe ist: http://dev.widemeadows.de/2011/11/02/android-bitmap-von-surfaceview-erzeugen/

Und dann noch http://www.droidnova.com/how-to-create-and-save-a-screenshot-from-a-surfaceview,880.html

Komme aber trotzdem nicht wirklich weiter. Ich habe gelesen, dass es scheinbar nicht möglich sein soll. Aber ich kann ja auch wenn die Camera Preview läuft einen Screenshot über Android machen....

Grüße

Hi,
ja, mittlerweile habe ich eine Lösung gefunden:D Du musst die onPreviewFrame überschreiben:

1@Override
2 public void onPreviewFrame(byte[] data, Camera camera) {
3 int[] rgb = decodeYUV420SP(data, 400, 240);
4 Bitmap bmp = Bitmap.createBitmap(rgb, 400, 240,
5 Bitmap.Config.ARGB_8888);
6
7 }


1public int[] decodeYUV420SP(byte[] yuv420sp, int width, int height) {
2 final int frameSize = width * height;
3 int rgb[] = new int[width * height];
4 for (int j = 0, yp = 0; j < height; j++) {
5 int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
6 for (int i = 0; i < width; i++, yp++) {
7 int y = (0xff & ((int) yuv420sp[yp])) - 16;
8 if (y < 0)
9 y = 0;
10 if ((i & 1) == 0) {
11 v = (0xff & yuv420sp[uvp++]) - 128;
12 u = (0xff & yuv420sp[uvp++]) - 128;
13 }
14 int y1192 = 1192 * y;
15 int r = (y1192 + 1634 * v);
16 int g = (y1192 - 833 * v - 400 * u);
17 int b = (y1192 + 2066 * u);
18 r = r < 0 ? 0 : (r > 262143 ? 262143 : r);
19 g = g < 0 ? 0 : (g > 262143 ? 262143 : g);
20 b = b < 0 ? 0 : (b > 262143 ? 262143 : b);
21 rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) | ((g>> 2) & 0xff00) | ((b >> 10) & 0xff);
22 }
23 }
24 return rgb;
25}
Ich hoffe ich konnte dir helfen:)

Melde dich, wenns geklappt hat!
Gruß,
Ilyas

— geändert am 26.08.2012, 01:00:54

Jochen K.

Antworten
Jochen K.
  • Forum-Beiträge: 33

26.08.2012, 01:49:38 via Website

Hi Ilyas!

Ich habe mal versucht, die onPreviewFrame zu überschreiben...jedoch erlaubt er mir das nicht. Kann es sein, dass er die onPreviewFrame nicht in einer Activity aufrufen kann? Meine SurfaceView habe ich über die main.xml hinzugefügt....


Danke und Grüße


EDIT:

Überschreiben konnte ich sie nun aber ich denke mal dass ich total auf dem Holzweg bin :(

1package com.example.surfaceviewscreen;
2
3import java.io.File;
4import java.io.FileOutputStream;
5
6import android.app.Activity;
7import android.graphics.Bitmap;
8import android.hardware.Camera;
9import android.hardware.Camera.PreviewCallback;
10import android.os.Bundle;
11import android.os.Environment;
12import android.view.Menu;
13import android.view.SurfaceHolder;
14import android.view.SurfaceView;
15import android.view.View;
16import android.view.View.OnClickListener;
17import android.widget.Button;
18
19public class MainActivity extends Activity implements SurfaceHolder.Callback,
20 OnClickListener, PreviewCallback {
21
22 private Button open, capture;
23 private Camera camera;
24 private SurfaceView surfaceView;
25 private SurfaceHolder surfaceHolder;
26 private boolean previewing = false;
27
28 private String mScreenshotPath = Environment.getExternalStorageDirectory()
29 + "/aaaSurface";
30
31 @Override
32 public void onCreate(Bundle savedInstanceState) {
33 super.onCreate(savedInstanceState);
34 setContentView(R.layout.main);
35
36 open = (Button) findViewById(R.id.open);
37 capture = (Button) findViewById(R.id.capture);
38
39 open.setOnClickListener(this);
40 capture.setOnClickListener(this);
41
42 surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
43
44 surfaceHolder = surfaceView.getHolder();
45 surfaceHolder.addCallback(this);
46 surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
47 createFolder();
48
49
50 }
51
52 private void createFolder() {
53 File dir = Environment.getExternalStorageDirectory();
54 File myDir = new File(dir, "aaaSurface");
55 if (myDir.exists() && myDir.isDirectory()) {
56
57 } else {
58 boolean created = myDir.mkdir();
59 System.out.println("Folder created : " + created);
60
61 }
62 }
63
64 @Override
65 public void onClick(View v) {
66 long ce = v.getId();
67
68 if (ce == R.id.open) {
69 if (!previewing) {
70 previewing = true;
71 camera = Camera.open();
72 if (camera != null) {
73 try {
74 camera.setPreviewDisplay(surfaceHolder);
75 camera.setDisplayOrientation(90);
76 camera.startPreview();
77 } catch (Exception e) {
78 e.printStackTrace();
79 }
80 }
81 }
82 } else if (ce == R.id.capture) {
83 saveScreenshot();
84 }
85
86 }
87
88 @Override
89 public void onPreviewFrame(byte[] data, Camera camera) {
90 int[] rgb = decodeYUV420SP(data, 400, 240);
91 Bitmap bmp = Bitmap.createBitmap(rgb, 400, 240, Bitmap.Config.ARGB_8888);
92
93 }
94
95 public int[] decodeYUV420SP(byte[] yuv420sp, int width, int height) {
96 final int frameSize = width * height;
97 int rgb[] = new int[width * height];
98 for (int j = 0, yp = 0; j < height; j++) {
99 int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
100 for (int i = 0; i < width; i++, yp++) {
101 int y = (0xff & ((int) yuv420sp[yp])) - 16;
102 if (y < 0)
103 y = 0;
104 if ((i & 1) == 0) {
105 v = (0xff & yuv420sp[uvp++]) - 128;
106 u = (0xff & yuv420sp[uvp++]) - 128;
107 }
108 int y1192 = 1192 * y;
109 int r = (y1192 + 1634 * v);
110 int g = (y1192 - 833 * v - 400 * u);
111 int b = (y1192 + 2066 * u);
112 r = r < 0 ? 0 : (r > 262143 ? 262143 : r);
113 g = g < 0 ? 0 : (g > 262143 ? 262143 : g);
114 b = b < 0 ? 0 : (b > 262143 ? 262143 : b);
115 rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000)
116 | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff);
117 }
118 }
119 return rgb;
120 }
121
122 public void saveScreenshot() {
123 /*System.out.println("Preview");
124 surfaceView.buildDrawingCache();
125 Bitmap bmp = Bitmap.createBitmap(surfaceView.getDrawingCache());
126 ByteArrayOutputStream baos = new ByteArrayOutputStream();*/
127
128 View view = findViewById(R.id.rootlayout);
129 View v1 = view.getRootView();
130 v1.setDrawingCacheEnabled(true);
131 Bitmap sourceScreenBmp = v1.getDrawingCache();
132
133 File file = new File(mScreenshotPath + "/" + System.currentTimeMillis()
134 + ".jpg");
135 FileOutputStream fos;
136 try {
137 fos = new FileOutputStream(file);
138 sourceScreenBmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
139 fos.close();
140 } catch (Exception e) {
141 // TODO: handle exception
142 }
143 }
144
145 @Override
146 public boolean onCreateOptionsMenu(Menu menu) {
147 getMenuInflater().inflate(R.menu.main, menu);
148 return true;
149 }
150
151 @Override
152 public void surfaceChanged(SurfaceHolder holder, int format, int width,
153 int height) {
154 // TODO Auto-generated method stub
155
156 }
157
158 @Override
159 public void surfaceCreated(SurfaceHolder holder) {
160 // TODO Auto-generated method stub
161
162 }
163
164 @Override
165 public void surfaceDestroyed(SurfaceHolder holder) {
166 // TODO Auto-generated method stub
167
168 }
169
170}

— geändert am 26.08.2012, 01:57:34

Antworten
ilyas i.
  • Forum-Beiträge: 61

26.08.2012, 01:58:21 via Website

Jochen K.
Hi Ilyas!

Ich habe mal versucht, die onPreviewFrame zu überschreiben...jedoch erlaubt er mir das nicht. Kann es sein, dass er die onPreviewFrame nicht in einer Activity aufrufen kann? Meine SurfaceView habe ich über die main.xml hinzugefügt....


Danke und Grüße

Ich habe, soweit ich mich erinnern kann, von surfaceview geerbt

Antworten
Jochen K.
  • Forum-Beiträge: 33

26.08.2012, 02:03:37 via Website

ilyas i.
Ich habe, soweit ich mich erinnern kann, von surfaceview geerbt

Also die SurfaceView nicht über die main.xml erstellen, sondern eine eigene Klasse erstellen und diese dann nutzen um in ihr die onPreviewFrame zu überschreiben?! Und ist es normal, dass in der onPreviewFrame die bmp nicht genutzt wird?


Grüße

Antworten
ilyas i.
  • Forum-Beiträge: 61

26.08.2012, 02:24:04 via Website

Jochen K.
ilyas i.
Ich habe, soweit ich mich erinnern kann, von surfaceview geerbt

Also die SurfaceView nicht über die main.xml erstellen, sondern eine eigene Klasse erstellen und diese dann nutzen um in ihr die onPreviewFrame zu überschreiben?! Und ist es normal, dass in der onPreviewFrame die bmp nicht genutzt wird?


Grüße

Ich habe in doch im xml ein surfaceview eingefügt. die bitmap im onpreviewframe wird von mir zwar genutzt, aber ich habe es aus dem quellcode rausgenommen. Die bitmap ist sozusagen der Inhalt deiner Surfaceview

1<SurfaceView
2 android:id="@+id/surfaceview"
3 android:layout_width="680px"
4 android:layout_height="480px"
5 />

— geändert am 26.08.2012, 03:03:30

Antworten
ilyas i.
  • Forum-Beiträge: 61

26.08.2012, 02:30:32 via Website

Hier noch ein paar Code-Ausschnitte:
1private static SurfaceView surfaceView;
2 private static SurfaceHolder surfaceHolder;
3...
4public class Activity_Camera extends Activity implements SurfaceHolder.Callback, PreviewCallback {

1setContentView(R.layout.main);
2surfaceView = (SurfaceView) findViewById(R.id.surfaceview);
3 surfaceHolder = surfaceView.getHolder();
4 surfaceHolder.addCallback(this);
5 surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
6
7...
8 surfaceView.setDrawingCacheEnabled(true);
9 surfaceView.buildDrawingCache();
1@Override
2 public void surfaceCreated(SurfaceHolder holder) {
3 Log.i(TAG, "surfaceCreated");
4 if (!previewing) {
5 camera = Camera.open();
6 if (camera != null) {
7 try {
8 camera.setPreviewDisplay(surfaceHolder);
9 } catch (IOException e1) {
10 e1.printStackTrace();
11 }
12 Camera.Parameters parameters = camera.getParameters();
13 parameters.setPreviewSize(400, 240);
14 parameters.setRotation(180);
15// parameters.setPreviewFormat(PixelFormat.YCbCr_420_SP);
16 parameters.setPreviewFrameRate(10);
17// parameters.set("camera-id", 2);
18 camera.setParameters(parameters);
19 camera.setPreviewCallback(this);
20 camera.startPreview();
21 previewing = true;
22 }
23 }
24 }

Jochen K.

Antworten
Jochen K.
  • Forum-Beiträge: 33

26.08.2012, 02:36:47 via Website

ilyas i.
Ich habe in doch im xml ein surfaceview eingefügt. die bitmap im onpreviewframe wird von mir zwar genutzt, aber ich habe es aus dem quellcode rausgenommen. Die bitmap ist sozusagen die Grafische oberfläche deiner Applikation;).

1<SurfaceView
2 android:id="@+id/surfaceview"
3 android:layout_width="680px"
4 android:layout_height="480px"
5 />

Okay...nun bin ich verwirrt....ich hab nun mal eine neue Klasse erstellt die von einer SurfaceView erbt und diese dann als SurfaceView genutzt, anstatt der aus der xml.

die onPreviewFrame kann ich dann überschreiben, wenn ich PreviewCallback der klasse hinzufüge, bzw. der Camera
1camera.setPreviewCallback(new PreviewCallback() {
2
3 @Override
4 public void onPreviewFrame(byte[] data, Camera camera) {
5 System.out.println("Bin drin");
6 int[] rgb = decodeYUV420SP(data, 400, 240);
7 Bitmap bmp = Bitmap.createBitmap(rgb, 400, 240, Bitmap.Config.ARGB_8888);
8
9 }
10 });

Versuche ich nun aber, die bmp zu nutzen um in ihr was zu schreiben, bekomme ich auch nur ein schwarzes image oder aber "Die Datei ist ungültig"....

Soll ich nun eine SurfaceView als Klasse erstellen oder in der XML? Oder ist das hier egal? Und wie tätige ich den Screenshot? Einmal habe ich es mit
1public void saveScreenshot() {
2
3
4 View view = findViewById(R.id.rootlayout);
5 View v1 = view.getRootView();
6 v1.setDrawingCacheEnabled(true);
7 Bitmap bmp = v1.getDrawingCache();
8
9 File file = new File(mScreenshotPath + "/" + System.currentTimeMillis()
10 + ".jpg");
11 FileOutputStream fos;
12 try {
13 fos = new FileOutputStream(file);
14 bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
15 fos.close();
16 } catch (Exception e) {
17 // TODO: handle exception
18 }
19 }

oder mit dem code, der ganz oben im thread steht. also von deinem ersten post...

Das mit: Die bitmap ist sozusagen die grafische oberfläche deiner applikation ist etwas schwierig zu verstehen....

Danke und Grüße

Antworten
ilyas i.
  • Forum-Beiträge: 61

26.08.2012, 02:50:20 via Website

So, am besten wir fangen von vorne an. Ich bin etwas abgelenkt gewesen.

Möchstest du das Bild von der Kamera oder willst du ein Screenshot deiner Applikation?

Wenn du ein Screenshot von deiner Applikation machen willst klappt es zwar, aber der Inhalt des Surfaceviews wird schwarz angezeigt(abgespeichert)!!!

Der Screenshot klappt bei den Elementen wie: Button, Textview etc. aber nicht bei Surfaceview.

Wenn du nur den Inhalt der Kamera brauchst, dann musst du den Surfaceview im XML haben und den onPreviewCallback implementieren!

— geändert am 26.08.2012, 02:51:23

Antworten
Jochen K.
  • Forum-Beiträge: 33

26.08.2012, 03:00:14 via Website

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 :D - 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

Antworten
ilyas i.
  • Forum-Beiträge: 61

26.08.2012, 03:18:19 via Website

Also die onPreviewCallback wird standdartmäßig (glaube ich) 30 mal pro sekunde aufgerufen.
Um nur einmal den Inhalt des Surfaceviews zu bekommen brauchst du das onpreivewcallback nicht.

So müsste es funktionieren:
surfaceView.setDrawingCacheEnabled(true);
surfaceView.buildDrawingCache();
Bitmap bmp = surfaceView.getDrawingCache();

Versuch dieses bmp abzuspeichern... Das decodeyuv könnte ein Fehler enthalten. Da müsste ich mal nachschauen. Ich bin gerade leider nicht zu Hause. Kann morgen mal danach schauen!

Was willst du denn eigentlich genau machen? Willst du ein Screenshot oder Inhalt des Surfaceviews?

Antworten
Jochen K.
  • Forum-Beiträge: 33

26.08.2012, 03:28:08 via Website

1surfaceView.setDrawingCacheEnabled(true);
2 surfaceView.buildDrawingCache();
3 Bitmap bmp = surfaceView.getDrawingCache();

Naja, dass funktioniert leider nicht, das habe ich ja auch schon unzählige mal getestet.

Ich muss eine Serie von Bildern aufnehmen, die zum einem die Camera Preview darstellt und zum anderen die darüber liegende Elemente wie GPS Daten und so weiter. Meine derzeitige Variante funktioniert zwar, also mit dem gleichzeitigen Aufnehmen von Fotos über die Kamera und den Screenshots der einzelnen Elemente die über der Preview liegen um diese dann später mittels Canvas übereinander zu legen, Nur komme ich da auf max 1,2 Fotos pro Sekunde und das ist zu langsam und vor allem verbraucht es viel zu viel Speicher, so dass die App öfters mal abstürzt.

Am coolsten wäre natürlich, wenn man ein Video aufnehmen könnte mit den Overlays, aber das geht ja nicht...

Wäre super, wenn Du morgen noch einmal gucken könntest, denn ich sitze schon seit Tagen an dem Problem Tag und Nacht....

Danke und Grüße aus dem Münsterland

Antworten
ilyas i.
  • Forum-Beiträge: 61

26.08.2012, 03:32:16 via Website

Jochen K.
1surfaceView.setDrawingCacheEnabled(true);
2 surfaceView.buildDrawingCache();
3 Bitmap bmp = surfaceView.getDrawingCache();

Naja, dass funktioniert leider nicht, das habe ich ja auch schon unzählige mal getestet.

Ich muss eine Serie von Bildern aufnehmen, die zum einem die Camera Preview darstellt und zum anderen die darüber liegende Elemente wie GPS Daten und so weiter. Meine derzeitige Variante funktioniert zwar, also mit dem gleichzeitigen Aufnehmen von Fotos über die Kamera und den Screenshots der einzelnen Elemente die über der Preview liegen um diese dann später mittels Canvas übereinander zu legen, Nur komme ich da auf max 1,2 Fotos pro Sekunde und das ist zu langsam und vor allem verbraucht es viel zu viel Speicher, so dass die App öfters mal abstürzt.

Am coolsten wäre natürlich, wenn man ein Video aufnehmen könnte mit den Overlays, aber das geht ja nicht...

Wäre super, wenn Du morgen noch einmal gucken könntest, denn ich sitze schon seit Tagen an dem Problem Tag und Nacht....

Danke und Grüße aus dem Münsterland

Alles klar, werde mal morgen nochmal nachschauen. Evlt. über ICQ oder MSN unterhalten!

— geändert am 26.08.2012, 03:34:57

Antworten
Jochen K.
  • Forum-Beiträge: 33

26.08.2012, 03:41:43 via Website

Super!

1Alles klar, werde mal morgen nochmal nachschauen. Evlt. über ICQ oder MSN unterhalten!

Geht auch Skype?

EDIT: Habe den Fehler gefunden -> Die width (400) und height (240) waren falsch. Ich habe mir nun die width und height von

1int width = camera.getParameters().getPreviewSize().width;
2 int height = camera.getParameters().getPreviewSize().height;

geholt und siehe da, es funktioniert!!! Zwar fehlen nun die Overlay, aber das denke ich mal sollte kein Thema sein! Werde da wohl weiterhin einen zweiten Screenshot machen und beide in einer Bitmap zusammenfügen...

Besten DANK!!!!

— geändert am 26.08.2012, 03:58:12

Antworten
ilyas i.
  • Forum-Beiträge: 61

26.08.2012, 05:10:31 via Website

Super!

1Alles klar, werde mal morgen nochmal nachschauen. Evlt. über ICQ oder MSN unterhalten!

Geht auch Skype?
>> Klar geht das auch!

EDIT: Habe den Fehler gefunden -> Die width (400) und height (240) waren falsch. Ich habe mir nun die width und height von

1int width = camera.getParameters().getPreviewSize().width;
2 int height = camera.getParameters().getPreviewSize().height;

geholt und siehe da, es funktioniert!!! Zwar fehlen nun die Overlay, aber das denke ich mal sollte kein Thema sein! Werde da wohl weiterhin einen zweiten Screenshot machen und beide in einer Bitmap zusammenfügen...

>> Ja stimmt, für meine bedürfnisse müsste es 400x240 sein. Daher musste ich zuerst :
>> Camera.Parameters parameters = camera.getParameters();
>> parameters.setPreviewSize(400, 240);


>> Verstehe, beide Bilder zusammenfügen.

Besten DANK!!!!
>> Gerne!

— geändert am 26.08.2012, 05:12:56

Antworten
ilyas i.
  • Forum-Beiträge: 61

26.08.2012, 05:16:46 via Website

ilyas i.
Super!

1Alles klar, werde mal morgen nochmal nachschauen. Evlt. über ICQ oder MSN unterhalten!

Geht auch Skype?
>> Klar geht das auch!

EDIT: Habe den Fehler gefunden -> Die width (400) und height (240) waren falsch. Ich habe mir nun die width und height von

1int width = camera.getParameters().getPreviewSize().width;
2 int height = camera.getParameters().getPreviewSize().height;

geholt und siehe da, es funktioniert!!! Zwar fehlen nun die Overlay, aber das denke ich mal sollte kein Thema sein! Werde da wohl weiterhin einen zweiten Screenshot machen und beide in einer Bitmap zusammenfügen...

>> Ja stimmt, für meine bedürfnisse müsste es 400x240 sein. Daher musste ich zuerst :
>> Camera.Parameters parameters = camera.getParameters();
>> parameters.setPreviewSize(400, 240);


>> Verstehe, beide Bilder zusammenfügen.

Besten DANK!!!!
>> Gerne!

P.S. Falls du nicht weisst wie du an die Overlays drankommst schaue dir Layout.setFactory an! Wenn du damit nicht klar kommst, sag bescheid! Habe mich damit auch schon beschäftigt! Vielleicht reicht dir aber auch das getDrawingCache aus.

— geändert am 26.08.2012, 05:32:54

Antworten