2017-10-26 9 views
1

のプレビューを取得するにはどうすればカメラからのプレビューを取得するためにその例を使用:はカメラ

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.List; 

import android.app.Activity; 
import android.hardware.Camera; 
import android.hardware.Camera.Size; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.TextureView; 
import android.widget.FrameLayout; 
import android.view.TextureView; 
import android.widget.ImageView; 
import android.graphics.Bitmap; 
import android.graphics.ImageFormat; 
import android.graphics.PixelFormat; 
import android.graphics.SurfaceTexture; 


public class MainActivity extends Activity implements 
TextureView.SurfaceTextureListener, Camera.PreviewCallback { 

    static { 
     System.loadLibrary("JNIProcessor"); 
    } 

    private final String TAG="LiveFeature"; 

    private Camera mCamera; 
    private byte[] mVideoSource; 

    private TextureView mTextureView; 

    private String[] ResolutionList; 
    private Menu AppMenu; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_live_feature); 


     mTextureView.setSurfaceTextureListener(this); 
    } 

    @Override 
    public void onSurfaceTextureSizeChanged(SurfaceTexture pSurface, 
      int pWidth, int pHeight) { 
     // Ignored 
    } 

    @Override 
    public void onSurfaceTextureUpdated(SurfaceTexture pSurface) { 
     // Ignored 
    } 

    @Override 
    public void onPreviewFrame(byte[] pData, Camera pCamera) { 
    } 
} 

Camera.PreviewCallbackが廃止されているようだと私はandroid.hardware.camera2使用する必要があります。問題は、私は未処理のデータバイトを取得するプレビューコールバック関数を見つけることができません。 私はちょうど表面にレンダリングせずにカメラからフレームをグラブし、それをJNI関数に入れるだけです。

+0

* deprecated * hardware.Camera APIを引き続き使用できます。新しい** camera2 ** APIはより強力ですが、古いデバイスでは機能しません。いずれにしても、古いカメラAPIと新しいカメラAPI(実際には基本的なAndroid開発者のガイドライン)では、カメラのプレビューを画面に表示する必要があります。 –

+0

@AlexCohn実際には、プレビューなしでAndroid 6.0.1まで写真を撮ることができました。 – m0skit0

答えて

0

プレビューを取得するには、次の手順:

  • は、マニフェストファイル(Manifest.permission.CAMERA)でカメラの権限を追加し

  • は、この方法でカメラのインスタンスを取得します。

    public static Camera getCameraInstance() { 
        Camera c = null; 
        try { 
         c = Camera.open(); // attempt to get a Camera instance 
        } catch (Exception e) { 
         Log.e(TAG, e.getMessage()); 
         // Camera is not available (in use or does not exist) 
        } 
        return c; // returns null if camera is unavailable 
    } 
    
  • SurfaceViewを拡張するクラスを作成し、クラスにSurfaceHolder.Callbackを実装させ、そのCameraインスタンスをコンストラクタに渡します。 、この方法でgetHolder()

  • 「surfaceCreated」とコンストラクタにホルダーを取得するプレビュー表示を設定し、

    public void surfaceCreated(SurfaceHolder holder) { try { mCameraSource.start(holder); mCamera.setPreviewDisplay(mHolder); setWillNotDraw(false); } catch (Exception e) { Log.d(TAG, "Error setting camera preview: " + e.getMessage()); } }

  • 停止プレビューとあなたはもう

    をそれを必要としないときは、カメラをリリースプレビューを開始

    mCamera.stopPreview(); mCamera.release();

関連する問題