2014-07-10 33 views
0

你好,我有整個代碼,但我想自動保存捕捉並釋放相機以預覽。我不知道該怎麼做:/它正在拍攝快照,但不保存釋放相機。保存Android攝像頭API而不使用INTENT

感謝您的傢伙!

package com.velcisribeiro.xcamera; 

+imports 

public class MainActivity extends Activity { 

private Camera cameraObject; 
private ShowCamera showCamera; 
private ImageView pic; 
public static Camera isCameraAvailiable(){ 
    Camera object = null; 
    try { 
     object = Camera.open(); 
    } 
    catch (Exception e){ 
    } 
    return object; 
} 

private PictureCallback capturedIt = new PictureCallback() { 

    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 

     Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data .length); 
     if(bitmap==null){ 
      Toast.makeText(getApplicationContext(), "not taken", Toast.LENGTH_SHORT).show(); 
     } 
     else 
     { 
      Toast.makeText(getApplicationContext(), "taken", Toast.LENGTH_SHORT).show(); 
     } 
     cameraObject.release(); 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_camera); 
    cameraObject = isCameraAvailiable(); 
    showCamera = new ShowCamera(this, cameraObject); 
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
    preview.addView(showCamera); 
} 

public void snapIt(View view){ 
    cameraObject.takePicture(null, null, capturedIt); 
} 
} 

而另一種是:

public class ShowCamera extends SurfaceView implements SurfaceHolder.Callback { 

private SurfaceHolder holdMe; 
private Camera theCamera; 

public ShowCamera(Context context,Camera camera) { 
    super(context); 
    theCamera = camera; 
    holdMe = getHolder(); 
    holdMe.addCallback(this); 
} 

@Override 
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { 
} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    try { 
     theCamera.setPreviewDisplay(holder); 
     theCamera.setDisplayOrientation(90); 
     theCamera.startPreview(); 
    } catch (IOException e) { 
    } 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder arg0) { 
} 

} 

回答

0

你需要在surfaceDestroyed回調中添加以下兩行來釋放相機。
theCamera.stopPreview();
theCamera.release();
並用於保存圖片更改onPictureTaken回調。
公共無效onPictureTaken(字節[]數據,攝像頭攝像頭){

Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data .length); 
    if(bitmap==null){ 
     Toast.makeText(getApplicationContext(), "not taken", Toast.LENGTH_SHORT).show(); 
    } 
    else 
    { 
     Toast.makeText(getApplicationContext(), "taken", Toast.LENGTH_SHORT).show(); 
    } 
    //Add code to save image 
    cameraObject.release(); 
} 

也對更好地理解以下網址看看。 http://androidtrainningcenter.blogspot.in/2012/01/how-to-use-android-camera-to-take.html

+0

是的,但拍攝快照後相機停止:/無法釋放以重新開始預覽。 – user3811313

相關問題