Manifest 에는 다음과 같은 코드를 사용하였음.
<uses-permission android:name="android.permission.CAMERA" /> |
Main Activity 소스코드
package com.Andro.App;
import com.Andro.App.TCPActivity;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Movie;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
import android.widget.LinearLayout;
import android.content.Intent;
public class MainActivity extends Activity {
private Preview mPreview;
Button btn;
LinearLayout tt;
LinearLayout tt2;
String fileName;
boolean flag;
TCPActivity ta;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPreview = new Preview(this);
setContentView(R.layout.main);
addContentView(mPreview, new LinearLayout.LayoutParams(1024, 400));
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mPreview.getPicture();
}
});
}
class Preview extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;
Context mCtx;
String filename;
Preview(Context context) {
super(context);
mCtx = context;
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int w,
int h) {
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(w, h);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
public void getPicture() {
mCamera.takePicture(null, null, new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH.mm.ss");
filename = dateFormat.format(new Date());
Bitmap picture = BitmapFactory.decodeByteArray(data, 0,
data.length);
MediaStore.Images.Media.insertImage(getContentResolver(),
picture, filename, "Fairy image");
Toast.makeText(MainActivity.this,
filename + "사진이저장되었습니다,", Toast.LENGTH_SHORT)
.show();
mCamera.startPreview();
Intent it = new Intent(MainActivity.this,
MovieActivity.class);
it.putExtra("file_name", filename);
startActivity(it);
}
});
}
}
}
여러가지 변형 로직이 있고, 저장방법도 좀 다른경우가 있는데 파일명을 저장시에 지정한
TITLE(제목) 은 일반적인 파일명과 다르게 저장된다. 파일명은 자동으로 저장되더라............
(구글링 기술이 부족해서인지 아무리 뒤져도 이유를 모름)
다음과 같은 방법은 파일명까지 내마음대로 지정이 가능하였다.
import 한것중엔 네트워크관련 된게 많으니...알아서 빼길바람..
'Android' 카테고리의 다른 글
[JNI] JNI 형식 및 데이터 구조 (0) | 2012.07.03 |
---|---|
[JNI] GetByteArrayElements (0) | 2012.07.03 |
Android OpenCV 샘플코드 (3) | 2012.07.02 |
Eclipse에서 JavaCV 설치/사용 (4) | 2012.06.10 |
Android + NDK + OpenCV (0) | 2012.06.01 |