์ฑ์ ๊ฐ๋ฐํ๋ฉด ์นด๋ฉ๋ผ๋ฅผ ์ข ์ข ์ฌ์ฉํ ์ผ์ด ์๋ค. ์นด๋ฉ๋ผ๋ฅผ ์ฌ์ฉํ๋ ๊ฑด ๋ ๊ฐ์ง์ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค. ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ Intent ๊ฐ์ฒด๋ฅผ ํ์ฉํด ๋ด์ฅ ์นด๋ฉ๋ผ ์ฑ์ผ๋ก ์บก์ณ๋ ์ด๋ฏธ์ง ํน์ ์์์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค. ์ฌํํ๊ฒ ํ์ํ ๊ธฐ๋ฅ์ ํตํด ์ํ๋ ์ด๋ฏธ์ง ํน์ ์์์ ๊ฐ์ ธ์ฌ ์ ์๋ ์ฅ์ ์ด ์์ง๋ง ์ด๋ฅผ ์ปค์คํ ํ๊ฒ ์ฌ์ฉ์ ๋ถ๊ฐ๋ฅํ๋ค. ๋๋ฒ ์งธ ๋ฐฉ๋ฒ์ธ Camera ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ์นด๋ฉ๋ผ๋ฅผ ์กฐ๊ธ ๋ ๋ด๊ฐ ์ํ๋๋๋ก ์ปค์คํ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์๋ณผ ๊ฒ ์ด๋ค.
Camera class๋ ์๋์ ๊ฐ์ ๊ฐ์ฒด ์ ์ธ์ ํตํด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
Camera camera = Camera.open();
Camera๋ฅผ SurfaceView๋ฅผ ํตํด ์ฑ ํ๋ฉด์ ํ์ํ ์ ์๋ค. ์๋ ์ฝ๋๋ฅผ ํตํด ์นด๋ฉ๋ผ๊ฐ ๋ด ์ฑ์ ํ๋ฉด์ ํ์๋๋ค.
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceVew);
camera.setPreviewDisplay(surfaceView.getHolder());
camera.startPreview();
์๋๋ก์ด๋ ๊ธฐ๊ธฐ๋ ์นด๋ฉ๋ผ์ ์ฌ์, ํด์๋๋ง๋ค ์ง์ํ๋ ์ง์ํ๋ ์ด๋ฏธ์ง ํน์ ์์ ์ฌ์ด์ฆ๊ฐ ๋ชจ๋ ๋ค๋ฅด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋น์ฐํ ์ฑ์ด ์ค์น๋ ๊ธฐ๊ธฐ์ ์นด๋ฉ๋ผ ์ฌ์ด์ฆ ๊ฐ์ ๊ฐ์ ธ์ ์ ํ ์ด ๋๊ฒ๋ ํด์ผ ํ๋ค.
ํด๋น ์ฝ๋๋ PreviewSize(์นด๋ฉ๋ผ๋ฅผ ํตํด ๋ณด์ด๋ ํ๋ฉด์ ํด์๋), PictureSize(์ ์ฅ๋๋ ์ด๋ฏธ์ง), VideoSize(์ ์ฅ๋๋ ์์)๋ฅผ ํตํด ์ฌ์ด์ฆ๋ฅผ ํ์ ํ ์ ์๋ค.
Camera.Parameters parameters = camera.getParameters();
for(Camera.Size size : parameters.getSupportedPreviewSizes()) {
Log.d(TAG, "PreviewSize = width : " + String.valueOf(size.width) + ", height : " + String.valueOf(size.height));
}
for(Camera.Size size : parameters.getSupportedPictureSizes()) {
Log.d(TAG, "PictureSize = width : " + String.valueOf(size.width) + ", height : " + String.valueOf(size.height));
}
for(Camera.Size size : parameters.getSupportedVideoSizes()) {
Log.d(TAG, "VideoSize = width : " + String.valueOf(size.width) + ", height : " + String.valueOf(size.height));
}
Dialog, Fragment ๋ฑ์ ํตํด ์ฌ์ฉ์๊ฐ ์ง์ ์ ํํ ์ ์๋๋ก ํ๋ ๊ฒ์ด ๋งค์ฐ ์ข๋ค.
Camera.Parameters parameters = camera.getParameters();
parameters.setPictureSize(pictureWidth, pictureHeight);
parameters.setPreviewSize(previewWidth, previewHeight);
camera.setParameters(parameters);
์์ ์ฌ์ด์ฆ์ ๊ฒฝ์ฐ๋ MediaRecorder ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํด๋น ํด๋์ค ๋ด์ setVideoSize(int width, int height) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
value ์ธ์์ ๊ฐ์ View.OnTouchListener๋ฅผ ํตํด ๊ตฌํด๋ด๋ ๊ฒ ์ผ๋ฐ์ ์ด๋ค.
camera.setZoomChangeListener(new Camera.OnZoomChangeListener() {
@Override
public void onZoomChange(int zoomValue, boolean stopped, Camera camera) {
//์ฒ๋ฆฌ
}
});
camera.startSmoothZoom(value);
camera.autoFocus(null); //์ด์ ์กฐ์ ํ์ Callback์ด ํ์ ์๋ ๊ฒฝ์ฐ (ex. ํ๋ฉด ํฐ์น ์ )
//์ด์ ์กฐ์ ํ์ Callback์ด ํ์ ์๋ ๊ฒฝ์ฐ (ex. ์
ํฐ ํด๋ฆญ ์)
camera.autoFocus(new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
camera.takePicture();
}
});
์นด๋ฉ๋ผ๋ฅผ ํ์ํ๊ณ ์ฌ๋ฌ ๋ฆฌ์ค๋ ํน์ ์ต์
๊ฐ์ ์
ํ
ํ์ผ๋ฉด ์ฌ์ง์ ์ฐ์ด๋ด์ผ ํ๋ค.
Camera.ShtterCallback ์ธ์ ์์น์ null ๊ฐ์ด ๋ค์ด๊ฐ๋ฉด ์นด๋ฉ๋ผ๊ฐ ์ฐํ๋ ์๋ฆฌ๊ฐ ๋์ง ์๋๋ค.
์๋๋ ๊ฐ๋จํ ์ฌ์ง์ ์ํ๋ ์์น์ ์ ์ฅํด๋ณด๋ ์ฝ๋์ด๋ค.
ํ์ผ์ ์ ์ฅํ๋ ์ฝ๋์ด๋ฏ๋ก ๊ผญ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />๋ฅผ ์ฌ์ฉํ๋๋ก ํ์.
camera.takePicture(shutterCallback, null, new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
try {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
FileOutputStream outputStream = new FileOutputStream(new File(Environment.getExternalStorageDirectory() + "/Download/"+
new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+".jpg"));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.close();
camera.startPreview(); //์
ํฐ์ ๋์์ ์ฐํ ์ด๋ฏธ์ง๋ก ํ๋ฉด์ด ๋ฉ์ถ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ฌ์ฉํด ๋ค์ ์ฌํ์๋ฅผ ํด์ผ ํ๋ค.
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
ํด๋น ํ๋ก์ ํธ๋ MyCamera class๋ฅผ ํตํด ์นด๋ฉ๋ผ ๊ฐ์ฒด์ ๋ํด ๋ณด๋ค ์ดํดํ๊ธฐ ์ฝ๋๋ก ๋ง๋ค์ด๋์๋ค. ์ฐธ๊ณ ํ์ฌ ๋๋ง์ ์นด๋ฉ๋ผ ์ฑ์ ๋ง๋ค์ด๋ณด์.