簡體   English   中英

使用相機拍攝照片,但不將其另存為文件,僅顯示

[英]Take a photo with Camera but don't save it as a file, only show it

在我的Android項目中,我想用Camera拍照, 但不要將其另存為文件,而只能在ImageView上以可繪制或其他形式顯示。

在我的項目中,可以看到相機,如下面的代碼所示。

我嘗試了很多方法,但是如果不保存SDCard卡就無法拍照。

ShowCamera.java

 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.startPreview();
        } catch (IOException e) {
        }
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder arg0) {
    }
}

MainActivity.java

public class MainActivity extends Activity  {

       private Camera cameraObject;
       private ShowCamera showCamera;

       public static Camera isCameraAvailiable(){
          Camera object = null;
          try {
             object = Camera.open(); 
          }
          catch (Exception e){
          }
          return object; 
       }



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_index);

          cameraObject = isCameraAvailiable();
          showCamera = new ShowCamera(this, cameraObject);
          final FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
          preview.addView(showCamera);
    }

謝謝!

首先,不要忘記將其放在您的AndroidManifest.xml中: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

因此,您可以按照以下示例操作: http : //hmkcode.com/android-camera-taking-photos-camera/

您需要在您的按鈕單擊例程中包括以下行:

mCamera.takePicture(null,null,mPicture);

然后創建一個例程:

private PictureCallback mPicture = new PictureCallback(){ //+ a lot of things...}

下面的代碼應該在PictureCallBack例程中

public void onPictureTaken(byte[] data, Camera camera){
   File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
      try{
         FileOutputStream fos = new FileOutputStream(pictureFile);
         fos.write(data);
         fos.close();
      }
      catch(FileNotFoundException e){}
      catch(IOException e){}
      File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                                      Environment.DIRECTORY_PICTURES), "MyCameraApp");
}

並嘗試找到該功能:

private static File getOutputMediaFile(int type){}

那也應該包括在內!

因此,您需要從相機拍攝的圖像並將其顯示在ImageView而不是保存它?

創建圖片回調以接收來自相機的數據並將其解碼為Bitmap:

private PictureCallback mPicture = new PictureCallback() {

    @Override
    public void onPictureTaken(final byte[] data, Camera c) {
        Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
        yourImageView.setImageBitmap(bm);
    }
};

呼叫攝像機捕獲(單擊捕獲按鈕時):

try {
    mCamera.takePicture(null, null, mPicture);
} catch (Exception e) {
    // take picture failed
    e.printStackTrace();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM