国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

android實現簡單拍照功能

2019-10-21 21:48:57
字體:
來源:轉載
供稿:網友

拍照可以調用系統的相機進行拍照,拍完保存到相應的SD卡目錄。最近要用到拍照這個功能,首先試了下調用相機拍照,保存到相應目錄,然后用imageview顯示的時候感覺,很模糊。可能是圖片被壓縮的太狠了。所以自己使用Camera寫了一個拍照的功能,拍出來的還挺清晰的,不過文件有點大一張圖片差不多1.7M。如果想拍高清圖可以使用下面的代碼。

代碼很簡單,我就不做過多解釋了。

package com.example.testsimple; import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.Date; import android.os.AsyncTask;import android.os.Bundle;import android.os.Environment;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.PixelFormat;import android.hardware.Camera;import android.text.format.DateFormat;import android.util.Log;import android.view.KeyEvent;import android.view.Menu;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView; public class MainActivity extends Activity {  private SurfaceView surfaceView;   private SurfaceHolder surfaceHolder;   private Camera camera;   private File picture;   private Button btnSave;   private final static String TAG = "CameraActivity";   private ImageView open_picIcon;    @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);        /* Intent intent=new Intent(MainActivity.this,MyCameraActivity.class);    startActivity(intent);    finish();*/    setupViews();  }   private void setupViews(){     surfaceView = (SurfaceView) findViewById(R.id.camera_preview); // Camera interface to instantiate components     surfaceHolder = surfaceView.getHolder(); // Camera interface to instantiate components     surfaceHolder.addCallback(surfaceCallback); // Add a callback for the SurfaceHolder     surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);          btnSave = (Button) findViewById(R.id.save_pic);    open_picIcon=(ImageView) findViewById(R.id.open_picIcon);         btnSave.setOnClickListener(new OnClickListener() {              @Override       public void onClick(View v) {       surfaceView.setVisibility(View.VISIBLE);       open_picIcon.setVisibility(View.GONE);        takePic();       }     });   }      @Override   public boolean onKeyDown(int keyCode, KeyEvent event) {     if (keyCode == KeyEvent.KEYCODE_CAMERA         || keyCode == KeyEvent.KEYCODE_SEARCH) {       takePic();       return true;     }     return super.onKeyDown(keyCode, event);   }    private void takePic() {      camera.stopPreview();// stop the preview      camera.takePicture(null, null, pictureCallback); // picture   }    // Photo call back   Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {     //@Override     public void onPictureTaken(byte[] data, Camera camera) {       new SavePictureTask().execute(data);       camera.startPreview();     }   };    // save pic   class SavePictureTask extends AsyncTask<byte[], String, String> {     @Override     protected String doInBackground(byte[]... params) {       String fname = DateFormat.format("yyyyMMddhhmmss", new Date()).toString()+".jpg";              Log.i(TAG, "fname="+fname+";dir="+Environment.getExternalStorageDirectory());       //picture = new File(Environment.getExternalStorageDirectory(),fname);// create file              picture = new File(Environment.getExternalStorageDirectory()+"/images/"+fname);       File file= picture.getParentFile();      if(!file.exists())           file.mkdir();      try {         FileOutputStream fos = new FileOutputStream(picture.getPath()); // Get file output stream         fos.write(params[0]); // Written to the file         fos.close();        } catch (Exception e) {         e.printStackTrace();       }       return null;     }     @Override    protected void onPostExecute(String result) {     // TODO Auto-generated method stub     super.onPostExecute(result);          Bitmap bitmap=getDiskBitmap(picture.getPath());     surfaceView.setVisibility(View.GONE);     open_picIcon.setVisibility(View.VISIBLE);     open_picIcon.setImageBitmap(bitmap);    }      }   private Bitmap getDiskBitmap(String pathString)   {     Bitmap bitmap = null;     try     {       File file = new File(pathString);       if(file.exists())       {         bitmap = BitmapFactory.decodeFile(pathString);       }     } catch (Exception e)     {       // TODO: handle exception     }               return bitmap;   }   // SurfaceHodler Callback handle to open the camera, off camera and photo size changes   SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {      public void surfaceCreated(SurfaceHolder holder) {       Log.i(TAG, "surfaceCallback====");       camera = Camera.open(); // Turn on the camera       try {         camera.setPreviewDisplay(holder); // Set Preview       } catch (IOException e) {         camera.release();// release camera         camera = null;       }     }      public void surfaceChanged(SurfaceHolder holder, int format, int width,         int height) {       Log.i(TAG,"====surfaceChanged");       Camera.Parameters parameters = camera.getParameters(); // Camera parameters to obtain       parameters.setPictureFormat(PixelFormat.JPEG);// Setting Picture Format //     parameters.set("rotation", 180); // Arbitrary rotation       camera.setDisplayOrientation(0);       parameters.setPreviewSize(400, 300); // Set Photo Size       camera.setParameters(parameters); // Setting camera parameters       camera.startPreview(); // Start Preview     }      public void surfaceDestroyed(SurfaceHolder holder) {       Log.i(TAG,"====surfaceDestroyed");       camera.stopPreview();// stop preview       camera.release(); // Release camera resources       camera = null;     }   }; }

拍完以后自動保存到SD卡中的images目錄下 

android,拍照

下面是圖片存放路徑

android,拍照

1.8M 確實有點大,不過是高清圖片

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵山县| 闸北区| 万山特区| 新乡县| 阿坝| 绥芬河市| 明星| 荥经县| 兴国县| 嘉鱼县| 云安县| 甘南县| 新宁县| 曲水县| 高青县| 武夷山市| 汤阴县| 万载县| 磴口县| 家居| 民县| 石台县| 张家川| 广元市| 车险| 北宁市| 米林县| 元氏县| 惠安县| 剑河县| 屏东县| 绥芬河市| 托里县| 宣武区| 静海县| 东源县| 和静县| 浦城县| 临沭县| 维西| 南宫市|