0
我想通過調用攝像頭表面視圖類的功能捕獲的位圖,但我總是得到錯誤是這樣的:Android相機SurfaceView拍照
任何幫助將不勝感激〜
java.lang.NullPointerException
at com.etoff.appsopengl.CameraSurfaceView.setCapture(CameraSurfaceView.java:58)
at com.etoff.appsopengl.Stage$MyRenderer.onDrawFrame(Stage.java:168)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1467)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1221)
這是舞臺類編碼呼叫編碼:
public class Stage extends GLSurfaceView {
CameraSurfaceView csv;
Bitmap imgB;
public Stage(Context context, AttributeSet attrs) {
super(context, attrs);
csv = new CameraSurfaceView(context);
}
//inside renderer I call the function
if(c==true){
csv.setCapture();
imgB = csv.getBitmap();
}
}
這是CameraSurfaceView類編碼:
public class CameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
Camera mCamera;
boolean isPreviewRunning = false;
Bitmap mBitmap;
CameraSurfaceView(Context context) {
super(context);
SurfaceHolder mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
synchronized(this) {
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
Log.e("Camera", "mCamera.setPreviewDisplay(holder);");
}
mCamera.setDisplayOrientation(90);
mCamera.startPreview();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
synchronized(this) {
try {
if (mCamera!=null) {
mCamera.stopPreview();
isPreviewRunning=false;
mCamera.release();
}
} catch (Exception e) {
Log.e("Camera", e.getMessage());
}
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
}
public void setCapture(){
mCamera.takePicture(null,null,mPicture);
}
public Bitmap getBitmap(){
return mBitmap;
}
private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inMutable = true;
mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, opt);
}
};
}
嘗試'mCamera = Camera.open(0);' –
不利於= ( –
然後你有多個相機。我會盡力回答 –