서페이스뷰를 카메라로 설정뒤 캡쳐 했는데 자꾸만 서페이스 뷰가 카메라가 찍고있는 부분이 뜨지않고 검은색 화면으로만 뜹니다....
검은색화면이 안뜨게 하거나 스크린샷으로 하지않고 카메라 찍는 것으로 바꾸려면 어떻게 해야하나요?...
public class MainActivity extends Activity implements SurfaceHolder.Callback{
Camera camera;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
boolean previewing = false;;
String str = "SoSsystemPicture";
View capView;
String stringPath = "/sdcard/samplevideo.3gp";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button buttonStartCameraPreview = (Button)findViewById(R.id.startcamerapreview);
LinearLayout ly_main = (LinearLayout)findViewById(R.id.lin01);
Button buttonStopCameraPreview = (Button)findViewById(R.id.stopcamerapreview);
getWindow().setFormat(PixelFormat.UNKNOWN);
surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
buttonStartCameraPreview.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(!previewing){
camera = Camera.open();
if (camera != null){
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
previewing = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
try
{
LinearLayout layout = (LinearLayout)findViewById(R.id.lin01);
View v1 = layout.getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bm = v1.getDrawingCache();
screenshot(bm);
Toast.makeText(MainActivity.this, "저장되었습니다.", Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
e.printStackTrace();
}
}});
buttonStopCameraPreview.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(camera != null && previewing){
camera.stopPreview();
camera.release();
camera = null;
try
{
LinearLayout layout = (LinearLayout)findViewById(R.id.lin01);
View v1 = layout.getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bm = v1.getDrawingCache();
screenshot(bm);
Toast.makeText(MainActivity.this, "저장되었습니다.", Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
e.printStackTrace();
}
previewing = false;
}
}});
}
private void screenshot(Bitmap bm) {
try{
// File path = getDir();
String filename = "aa14.png";
/*
if(! path.isDirectory()){
path.mkdirs();
}*/
File f = new File(Environment.getExternalStorageDirectory(),filename);
try{
OutputStream out = new FileOutputStream(f);
bm.compress(Bitmap.CompressFormat.PNG, 100, out);
out.close();
}
catch (IOException e){
e.printStackTrace();
}
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
}
catch(Exception error) {
}
}
/*
private File getDir()
{
File sd_Dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
return new File(sd_Dir,str);
}
*/
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}