게시판에다가 올려서 개발정보로 다시 올립니당~!!
잘 뜯어서 써보세요!!
//셔터 버튼
shutterbutton = (ImageButton)findViewById(R.id.take);
savebutton = (ImageButton)findViewById(R.id.save);
shutterbutton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//surface view화면을 저장하는 함수
camera.takePicture(shutterCallback, rawCallback, mPicutureListener);
savebutton.setVisibility(View.VISIBLE);
shutterbutton.setVisibility(View.GONE);
onPause();
Toast.makeText(measure.this,"셔터를 다시 누르시면 저장됩니다!", Toast.LENGTH_LONG).show();
}
});
savebutton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//화면캡쳐부분
View v1 = view1.getRootView();
v1.setDrawingCacheEnabled(true);
bm = v1.getDrawingCache();
showScreen(bm);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
Toast.makeText(measure.this,"저장완료!", Toast.LENGTH_LONG).show();
finish();
}
});
Log.d(TAG, "onCreate'd");
}
//캡쳐부분
private void showScreen(Bitmap bm) {
try {
File path = new File("/sdcard/FunFun");
if(! path.isDirectory()) {
path.mkdirs();
}
FileOutputStream out = new FileOutputStream("/sdcard/"+
System.currentTimeMillis()+".jpeg");
bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
} catch (FileNotFoundException e) {
Log.d("FileNotFoundException:", e.getMessage());
}
}
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
Log.d(TAG, "onShutter'd");
}
};
/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.d(TAG, "onPictureTaken - raw");
}
};
//JPEG 이미지 생성 후에 호출
private Camera.PictureCallback mPicutureListener =
new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.i(TAG, "Picture Taken");
if (data != null) {
Log.i(TAG, "JPEG Picture Taken");
BitmapFactory.Options options =
new BitmapFactory.Options();
options.inSampleSize = 2;
Bitmap bitmap =BitmapFactory.decodeByteArray(
data, 0, data.length); //bitmap 변수에 사진을 저장
Matrix matrix = new Matrix();
// rotate the Bitmap
matrix.postRotate(90);
// recreate the new Bitmap
Bitmap rotateBitmap = Bitmap.createBitmap(bitmap, 0, 0,
bitmap.getWidth(), bitmap.getHeight(), matrix, true);
//서피스뷰를 없애고 이미지뷰를 불러와서 사진을 지정함
surfaceView.setVisibility(View.GONE);
Picturetmp. setVisibility(View.VISIBLE);
Picturetmp.setImageBitmap(rotateBitmap);
Picturetmp.setScaleType(ImageView.ScaleType.FIT_XY);
}
}
};
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
if(previewing){
camera.stopPreview();
previewing = false;
}
if (camera != null){
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
previewing = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera = Camera.open();
//카메라를 90도 꺾어서 세로방향으로 서페이스뷰에 프리뷰를 출력
camera.setDisplayOrientation(90);
Camera.Parameters parameters = camera.getParameters();
camera.setParameters(parameters);
//프리뷰 디스플레이를 담당한 서페이스 홀더설정
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//카메라가 종료될시 surcafe를 제거하고
//카메라의 프리뷰기능을 종료후 카메라 hardware를 종료시킴
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera.stopPreview();
camera.release();
camera = null;
previewing = false;
}
Bitmap bitmap =BitmapFactory.decodeByteArray(data, 0, data.length); 을

SurfaceView 는 getDrawingCache()을써서 비트맵으로 캡쳐가 안되던데...
되시나요..?;;;
camera.takePicture 을 써서 파일로 저장한 다음 불러오는 거 맞죠?...
SurfaceView 를 바로 캡쳐하고 싶은데 하아... 정녕 방법이 없는건지 ㅠ_ㅠ
미치겠네요...
보안 문제 때문에 캡쳐를 막는 방법도 알려졌으면 하는군요.
좋은 정보 감사합니다.