setParameters() schlägt fehl, trotz Einstellung Vorschau-Größe
Mache ich eine einfache demo, wo ich Sie auch füttern können die Kamera-Vorschau, um eine SurfaceView in meine Tätigkeit. Ich kam zu wissen, dass setParameters() schlägt fehl, wenn Sie nicht setzen eine unterstützte Größe. Aber selbst wenn ich das getan habe, ich bin immer die gleiche FATALE AUSNAHME. Bitte um Hilfe!!
Code:
package ank.altcamera;
import java.io.IOException;
import java.util.List;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.Switch;
import android.widget.Toast;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.ImageFormat;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Size;
public class CameraActivity extends Activity implements SurfaceHolder.Callback{
Switch sw_flash;
SeekBar sb_zoom;
Camera cam;
SurfaceView surf_view;
SurfaceHolder surf_holder;
boolean preview;
final int TAKE_PICTURE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
sw_flash = (Switch) findViewById(R.id.sw_flash);
sb_zoom = (SeekBar) findViewById(R.id.seekBar1);
//camera settings
surf_view = (SurfaceView) findViewById(R.id.surfaceView);
surf_holder = surf_view.getHolder();
surf_holder.addCallback(CameraActivity.this);
}
/* Must implement Interface methods */
//onClickListener for the button
public void takePicture (View v) {
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
//TODO Auto-generated method stub
if (preview) {
cam.stopPreview();
}
Camera.Parameters p = cam.getParameters();
//check for supported sizes to avoid exceptions
Size size = getBestPreviewSize(width, height, p);
p.setPreviewSize(size.width, size.height);
//move ahead
p.setPreviewFormat(ImageFormat.JPEG);
cam.setParameters(p);
//start the preview
try {
cam.setPreviewDisplay(surf_holder);
cam.startPreview();
preview = true;
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//TODO Auto-generated method stub
cam = Camera.open();
if (cam != null){
Camera.Parameters params = cam.getParameters();
cam.setParameters(params);
}
else {
Toast.makeText(getApplicationContext(), "Camera error.", Toast.LENGTH_LONG).show();
finish();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//TODO Auto-generated method stub
cam.stopPreview();
preview = false;
cam.release();
}
private Camera.Size getBestPreviewSize(int width, int height, Camera.Parameters parameters){
Size bestSize = null;
List<Camera.Size> sizeList = parameters.getSupportedPreviewSizes();
bestSize = sizeList.get(0);
for(int i = 1; i < sizeList.size(); i++){
if((sizeList.get(i).width * sizeList.get(i).height) >
(bestSize.width * bestSize.height)){
bestSize = sizeList.get(i);
}
}
return bestSize;
}
}
Und hier ist mein layout-XML-Datei:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_main"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".CameraActivity" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="18dp"
android:minWidth="100dp"
android:text="Awesome Camera"
android:textColor="#fff"
android:textSize="25sp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:text="Zoom"
android:textColor="#fff"
android:textStyle="bold" />
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp" />
</LinearLayout>
<Switch
android:id="@+id/sw_flash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Flash"
android:textColor="#fff"
android:textStyle="bold" />
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:background="#fff"
android:onClick="takePicture"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="Take Picture" />
</LinearLayout>
Und schließlich die logcat Ausgabe:
06-22 10:26:50.421: D/TextLayoutCache(12360): Using debug level: 0 - Debug Enabled: 0
06-22 10:26:50.511: D/libEGL(12360): loaded /system/lib/egl/libGLES_android.so
06-22 10:26:50.561: D/libEGL(12360): loaded /system/lib/egl/libEGL_adreno200.so
06-22 10:26:50.601: D/libEGL(12360): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
06-22 10:26:50.601: D/libEGL(12360): loaded /system/lib/egl/libGLESv2_adreno200.so
06-22 10:26:50.701: I/Adreno200-EGLSUB(12360): <ConfigWindowMatch:2218>: Format RGBA_8888.
06-22 10:26:50.711: D/memalloc(12360): /dev/pmem: Mapped buffer base:0x516f6000 size:5775360 offset:4239360 fd:58
06-22 10:26:50.711: D/OpenGLRenderer(12360): Enabling debug mode 0
06-22 10:26:51.491: D/AndroidRuntime(12360): Shutting down VM
06-22 10:26:51.491: W/dalvikvm(12360): threadid=1: thread exiting with uncaught exception (group=0x40c28a68)
06-22 10:26:51.501: E/AndroidRuntime(12360): FATAL EXCEPTION: main
06-22 10:26:51.501: E/AndroidRuntime(12360): java.lang.RuntimeException: setParameters failed
06-22 10:26:51.501: E/AndroidRuntime(12360): at android.hardware.Camera.native_setParameters(Native Method)
06-22 10:26:51.501: E/AndroidRuntime(12360): at android.hardware.Camera.setParameters(Camera.java:1476)
06-22 10:26:51.501: E/AndroidRuntime(12360): at ank.altcamera.CameraActivity.surfaceChanged(CameraActivity.java:71)
06-22 10:26:51.501: E/AndroidRuntime(12360): at android.view.SurfaceView.updateWindow(SurfaceView.java:591)
06-22 10:26:51.501: E/AndroidRuntime(12360): at android.view.SurfaceView.access$000(SurfaceView.java:81)
06-22 10:26:51.501: E/AndroidRuntime(12360): at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:173)
06-22 10:26:51.501: E/AndroidRuntime(12360): at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:590)
06-22 10:26:51.501: E/AndroidRuntime(12360): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1799)
06-22 10:26:51.501: E/AndroidRuntime(12360): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2632)
06-22 10:26:51.501: E/AndroidRuntime(12360): at android.os.Handler.dispatchMessage(Handler.java:99)
06-22 10:26:51.501: E/AndroidRuntime(12360): at android.os.Looper.loop(Looper.java:137)
06-22 10:26:51.501: E/AndroidRuntime(12360): at android.app.ActivityThread.main(ActivityThread.java:4517)
06-22 10:26:51.501: E/AndroidRuntime(12360): at java.lang.reflect.Method.invokeNative(Native Method)
06-22 10:26:51.501: E/AndroidRuntime(12360): at java.lang.reflect.Method.invoke(Method.java:511)
06-22 10:26:51.501: E/AndroidRuntime(12360): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
06-22 10:26:51.501: E/AndroidRuntime(12360): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
06-22 10:26:51.501: E/AndroidRuntime(12360): at dalvik.system.NativeStart.main(Native Method)
06-22 10:27:00.301: I/Process(12360): Sending signal. PID: 12360 SIG: 9
Bitte helfen Sie mir!
InformationsquelleAutor dotslash | 2013-06-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Dokumentation besagt, dass
setParameters
wirft einenRuntimeException
wenn die Parameter ungültig sind oder nicht unterstützt werden.Die Parameter, die Sie verändern die Größe und das format, Jedoch die sind in den Größen von
getSupportedPreviewSizes
also Sie dürfen nicht das problem sein. Ich denke das problem ist mitsetPreviewFormat(ImageFormat.JPEG)
.Einsicht werden im Laufe der Zeit entwickeln, Sie müssen nur versuchen und Ihre Probleme zu lösen auf Ihre eigenen 🙂 ich habe keine Ahnung, warum nicht von der Kamera unterstützt JPEG-Vorschau, aber das ist das problem hier.
Hmmm. Gut, vielen Dank!
JPEG-Vorschau nicht unterstützt, da die Vorschau kopiert display-Oberflächen-und display-Oberflächen keine Unterstützung für JPEG-Daten als input. NV12, ist das typische format für die Vorschau.
InformationsquelleAutor Jong
Ist es immer wichtig, mit diesem Fehler zu stellen Sie sicher, überprüfen Sie alle Parameter, die die Kamera bittet zu setzen, um sicherzustellen, dass alle parameter, die Sie Fragen, dass die Kamera selbst ist möglich für die Kamera.
Mit der Vorschau-Größe:
Mit dem Blitz/Fokus-Modi:
etc. All das verpackt in einem schönen try{}catch(){} funktioniert Super. Viel Glück.
Hier ist die getOptimalPreview Größe von diese tolle Anleitung:
InformationsquelleAutor ColossalChris
Können Sie nicht sagen, welche parameter führen-runtime-exception aus dem message-text zeigt es.
Sie hatte besser prüfen, Parameter eins.
InformationsquelleAutor laputa999