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();
}
}