마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

서페이스뷰 카메라로 설정뒤 캡쳐하면 검은색화면...

0 추천

서페이스뷰를 카메라로 설정뒤 캡쳐 했는데 자꾸만 서페이스 뷰가 카메라가 찍고있는 부분이 뜨지않고 검은색 화면으로만 뜹니다....

검은색화면이 안뜨게 하거나 스크린샷으로 하지않고 카메라 찍는 것으로 바꾸려면 어떻게 해야하나요?...


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
   
  }
 }

 

카다쿠리 (280 포인트) 님이 2013년 11월 10일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...