1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | package com.android.Camera20110501; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.Locale; import android.app.Activity; import android.content.pm.ActivityInfo; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.PixelFormat; import android.hardware.Camera; import android.hardware.Camera.PictureCallback; import android.os.Bundle; import android.text.format.DateFormat; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class Camera20110501 extends Activity implements SurfaceHolder.Callback { SurfaceView mSurfaceView; SurfaceHolder mSurfaecHolder; Button btn_Capture; Camera mCamera; PictureCallback jpegPictureCallback; ImageView ImgView; TextView txtView; String mStorageFilePath = "/sdcard/DCIM/Camera/" + new DateFormat().format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.TAIWAN))+".jpg"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFormat(PixelFormat.TRANSLUCENT); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); ImgView = (ImageView)this.findViewById(R.id.ImgView); txtView = (TextView)this.findViewById(R.id.txtView); txtView.setText(this.getResources().getString(R.id.txtView)); btn_Capture = (Button)this.findViewById(R.id.btn_Capture); btn_Capture.setText(R.string.Str_Capture); mSurfaceView = (SurfaceView)this.findViewById(R.id.surView_Camera); mSurfaecHolder = mSurfaceView.getHolder(); mSurfaecHolder.addCallback(this); mSurfaecHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); jpegPictureCallback = new PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { Bitmap mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length); File file = new File(mStorageFilePath); try { file.createNewFile(); BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(file)); mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, os); os.flush(); os.close(); Toast.makeText(getApplicationContext(), "圖片已儲存", Toast.LENGTH_LONG).show(); } catch (IOException e) { e.printStackTrace(); } ImgView.setImageBitmap(mBitmap); mCamera.startPreview(); } }; btn_Capture.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(mCamera != null) { mCamera.takePicture(null, null, jpegPictureCallback); } } }); } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Camera.Parameters parameters = mCamera.getParameters(); parameters.setPreviewSize(width, height); mCamera.setParameters(parameters); mCamera.startPreview(); } public void surfaceCreated(SurfaceHolder holder) { mCamera = Camera.open(); try{ mCamera.setPreviewDisplay(holder); }catch(Exception e) {e.printStackTrace(); } } public void surfaceDestroyed(SurfaceHolder holder) { mCamera.stopPreview(); mCamera.release(); } } |
Direct link: https://paste.plurk.com/show/449919