public class MainActivity extends AppCompatActivity {
ImageView imageView;
File outputFile;
FrameLayout container;
CameraSurfaceView cameraView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageView);
container = (FrameLayout) findViewById(R.id.container);
cameraView = new CameraSurfaceView(this);
container.addView(cameraView);
File storageDir = Environment.getExternalStorageDirectory();
outputFile = new File(storageDir, "output.jpg");
}
public void onButton1Clicked(View v) {
cameraView.capture(new android.hardware.Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, android.hardware.Camera camera) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
BitmapFactory.decodeByteArray(data,0,data.length,options);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1001) {
// 카메라앱 화면에서 받음
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap bitmap = BitmapFactory.decodeFile(outputFile.getAbsolutePath(), options);
imageView.setImageBitmap(bitmap);
}
}
class CameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder holder;
android.hardware.Camera camera = null;
CameraSurfaceView(Context context) {
super(context);
Init(context);
}
CameraSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
Init(context);
}
private void Init(Context context) {
holder = getHolder();
holder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
camera = android.hardware.Camera.open();
camera.setPreviewDisplay(holder);
} catch (Exception e){
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
camera.startPreview();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
camera.startPreview();
camera.release();
camera = null;
}
public boolean capture(android.hardware.Camera.PictureCallback callback){
if(camera != null){
camera.takePicture(null,null,callback);
return true;
} else{
return false;
}
}
}//기본이 두개가 필요
}