onPreviewFrame (byte [] 데이터, 카메라 카메라)에서 데이터를 가져 오려고합니다. 그러나 그것은 작동하지 않는 것 같습니다. 이 코드에 문제가 있습니까? 이것의 대부분은 여기카메라에서 Android onPreviewFrame 콜백이 호출되지 않습니다.
public class UAVCamera extends Thread {
Camera mCamera;
CameraPreview mPreview;
public UAVCamera(Context context) {
mPreview = new CameraPreview(context);
}
@Override
public void run() {
safeCameraOpen();
mPreview.setCamera(mCamera);
}
private boolean safeCameraOpen() {
boolean qOpened = false;
try {
releaseCameraAndPreview();
mCamera = Camera.open();
qOpened = (mCamera != null);
} catch (Exception e) {
//Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
}
return qOpened;
}
private void releaseCameraAndPreview() {
mPreview.setCamera(null);
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
}
}
http://developer.android.com/training/camera/cameradirect.html에서 바로 온 것은 내 미리보기 클래스 다음
class CameraPreview extends ViewGroup implements SurfaceHolder.Callback {
SurfaceView mSurfaceView;
SurfaceHolder mHolder;
Camera mCamera;
CameraPreview(Context context) {
super(context);
mSurfaceView = new SurfaceView(context);
addView(mSurfaceView);
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = mSurfaceView.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
private void stopPreviewAndFreeCamera() {
if (mCamera != null) {
/*
Call stopPreview() to stop updating the preview surface.
*/
mCamera.stopPreview();
/*
Important: Call release() to release the camera for use by other applications.
Applications should release the camera immediately in onPause() (and re-open() it in
onResume()).
*/
mCamera.release();
mCamera = null;
}
}
public void setCamera(Camera camera) {
if (mCamera == camera) { return; }
stopPreviewAndFreeCamera();
mCamera = camera;
if (mCamera != null) {
try {
mCamera.setPreviewDisplay(mHolder);
} catch (IOException e) {
e.printStackTrace();
}
/*
Important: Call startPreview() to start updating the preview surface. Preview must
be started before you can take a picture.
*/
mCamera.startPreview();
mCamera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
}
});
}
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
@Override
protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {
// TODO Auto-generated method stub
}
}
것은 정말도에 사진을 표시 할 필요가 없습니다 내 활동
public class MainActivity extends Activity {
private UAVCamera uavCamera;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uavCamera = new UAVCamera(this);
uavCamera.start();
}
}
입니다 사용자. 데이터에 접근해야합니다. 그렇게 할 수 있습니까? onPreviewFrame (byte [] data, 카메라 카메라)에 중단 점을 넣었지만 절대로 충돌하지 않습니다.
보안상의 이유 때문에 아마도 가능하지 않습니다. 이미지가 실제로 표면에 보이지 않는 한 포어 그라운드 활동으로 캡처 할 수도 없습니다. –
@rickster 나는 너와 같은 문제가있어, onpreviewframe이 불리지 않았고, 어떤 해결책이 있니? [내 문제] (http://stackoverflow.com/q/29310279/4388898) –