[英]How to get a preview of camera
我使用該示例從相機獲取預覽:
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函數中。
這些步驟以獲得預覽:
在清單文件(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()
獲取構造函數中的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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.