2012-09-07 3 views
4

가능한 중복 :
Capture image with front camera without opening the camera application in android자동으로 안드로이드에서 이미지를 캡처하는 방법

내 문제는 내가 단지 카메라를 시작하고 이미지를 캡처 버튼을 클릭 의도를 사용하여 캡처 할 수있다

. 단추를 클릭하지 않거나 추가 할 수있는 코드를 자동으로 수행 할 수 있습니까? 미리 감사드립니다. 자동으로 캡처 버튼을 누르지 않고

+0

도움을 주셔서 감사합니다? – shankz

+0

이것이 가능한지 아닌지 나에게 알리는 것은 사용자의 지식없이 이미지를 캡처하는 올바른 방법이 아닙니다. – rajpara

+0

어쨌든 고마워요. – shankz

답변

7
public class CameraView extends Activity implements SurfaceHolder.Callback, OnClickListener{ 
     private static final String TAG = "CameraTest"; 
     Camera mCamera; 
     boolean mPreviewRunning = false; 

     @SuppressWarnings("deprecation") 
     public void onCreate(Bundle icicle){ 
      super.onCreate(icicle); 
      Log.e(TAG, "onCreate"); 

      getWindow().setFormat(PixelFormat.TRANSLUCENT); 
      requestWindowFeature(Window.FEATURE_NO_TITLE); 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      setContentView(R.layout.cameraview); 
      ImageView img = (ImageView) findViewById(R.id.blankImage); 

      if(CaptureCameraImage.isBlack) 
       img.setBackgroundResource(android.R.color.black); 
      else 
       img.setBackgroundResource(android.R.color.white); 

      mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera); 
      mSurfaceView.setOnClickListener(this); 
      mSurfaceHolder = mSurfaceView.getHolder(); 
      mSurfaceHolder.addCallback(this); 
      mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

     } 

     @Override 
     protected void onRestoreInstanceState(Bundle savedInstanceState){ 
      super.onRestoreInstanceState(savedInstanceState); 
     } 


     Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { 

      public void onPictureTaken(byte[] data, Camera camera) { 
       // TODO Auto-generated method stub 
       if (data != null){ 
        //Intent mIntent = new Intent(); 
        //mIntent.putExtra("image",imageData); 

        mCamera.stopPreview(); 
        mPreviewRunning = false; 
        mCamera.release(); 

        try{ 
         BitmapFactory.Options opts = new BitmapFactory.Options(); 
         Bitmap bitmap= BitmapFactory.decodeByteArray(data, 0, data.length,opts); 
         bitmap = Bitmap.createScaledBitmap(bitmap, 300, 300, false); 
         int width = bitmap.getWidth(); 
         int height = bitmap.getHeight(); 
         int newWidth = 300; 
         int newHeight = 300; 

         // calculate the scale - in this case = 0.4f 
         float scaleWidth = ((float) newWidth)/width; 
         float scaleHeight = ((float) newHeight)/height; 

         // createa matrix for the manipulation 
         Matrix matrix = new Matrix(); 
         // resize the bit map 
         matrix.postScale(scaleWidth, scaleHeight); 
         // rotate the Bitmap 
         matrix.postRotate(-90); 
         Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, 
           width, height, matrix, true); 
         CaptureCameraImage.image.setImageBitmap(resizedBitmap); 

        }catch(Exception e){ 
         e.printStackTrace(); 
        } 
        //StoreByteImage(mContext, imageData, 50,"ImageName"); 
        //setResult(FOTO_MODE, mIntent); 
        setResult(585); 
        finish(); 
       }  
      } 
     }; 

     protected void onResume(){ 
      Log.e(TAG, "onResume"); 
      super.onResume(); 
     } 

     protected void onSaveInstanceState(Bundle outState){ 
      super.onSaveInstanceState(outState); 
     } 

     protected void onStop(){ 
      Log.e(TAG, "onStop"); 
      super.onStop(); 
     } 

     @TargetApi(9) 
     public void surfaceCreated(SurfaceHolder holder){ 
      Log.e(TAG, "surfaceCreated"); 
      mCamera = Camera.open(CaptureCameraImage.cameraID); 
     } 

     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
      Log.e(TAG, "surfaceChanged"); 

      // XXX stopPreview() will crash if preview is not running 
      if (mPreviewRunning){ 
       mCamera.stopPreview(); 
      } 

      Camera.Parameters p = mCamera.getParameters(); 
      p.setPreviewSize(300, 300); 

      if(CaptureCameraImage.cameraID == 0){ 
       String stringFlashMode = p.getFlashMode(); 
       if (stringFlashMode.equals("torch")) 
         p.setFlashMode("on"); // Light is set off, flash is set to normal 'on' mode 
       else 
         p.setFlashMode("torch"); 
      } 

      mCamera.setParameters(p); 
      try{ 
       mCamera.setPreviewDisplay(holder); 
      }catch (Exception e){ 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      mCamera.startPreview(); 
      mPreviewRunning = true; 
      mCamera.takePicture(null, mPictureCallback, mPictureCallback); 
     } 

     public void surfaceDestroyed(SurfaceHolder holder) { 
      Log.e(TAG, "surfaceDestroyed"); 
      //mCamera.stopPreview(); 
      //mPreviewRunning = false; 
      //mCamera.release(); 
     } 

     private SurfaceView mSurfaceView; 
     private SurfaceHolder mSurfaceHolder; 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      mCamera.takePicture(null, mPictureCallback, mPictureCallback); 
     } 

    } 

당신은 또한이 활동을 호출 코드 mCamera.takePicture (널 (null), mPictureCallback, mPictureCallback)의 라인 아래 확인해야합니다; 당신은 당신은

에서 전체 프로젝트를 찾을 수 있습니다) 사용자 상호 작용)이 먼저 발생 2를 저지 할 필요가 사진을 촬영하면 사용자 상호 작용을하지 않으려면 (그것은 즉시 시작으로 사진을 촬영합니다 원한다면 그것은)를 두 번 1이라고

https://github.com/sandipmjadhav/CaptureImage

당신은 당신이 저에게 선생님

+0

도움을 주셔서 대단히 감사합니다. – shankz

+0

그것은 선생님이 일했습니다. 정말 고마워요! 그 부분에 대한 큰 도움 – shankz

+0

죄송합니다. 저는 투표 할 수 없습니다. 나의 명성으로는 충분하지 않습니다 (투표에 15 평의 평판이 필요합니다). – shankz

0

예, 당신이 취할 수있는 이미지. 이미지를 캡처하려는 액티비티는 extends Activityimplements PictureCallback, ShutterCallback이어야합니다.

당신은 videoPreview이 extends SurfaceView하고 SurfaceHolder.Callback

Camera.open();를 구현 내가 만든 클래스의 인스턴스가 VideoPriview 클래스도이다

videoPreview.getCamera().takePicture(this, null, this); 

방법에 따라 사용해야합니다

+0

고맙습니다. 시도해 보겠습니다. – shankz

관련 문제