2016-01-06 90 views
0

我正在使用opencv视频流编写代码,并且我想在首次打开相机时打开相机闪光灯。我已经实施了从JavaCameraView但应用程序崩溃扩展一个新的类时,我CAL这一行:使用OpenCV3.0.0的相机闪光灯Android不能使用

mOpencvCameraView.setEffect(Camera.Parameters.FLASH_MODE_ON); 

类是由于以下几点: 我的代码

public class CameraCustomize extends JavaCameraView implements Camera.PictureCallback { 
private String mPictureFileName; 

public CameraCustomize(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 
public List<String> getEffectList() { 
    return mCamera.getParameters().getSupportedFlashModes(); 
} 
public boolean isEffectSupported() { 
    return (mCamera.getParameters().getFlashMode() != null); 
} 
public String getEffect() { 
    return mCamera.getParameters().getFlashMode(); 
} 
public void setEffect(String effect) { 
    mCamera.getParameters();// here where i get the Error 
    Camera.Parameters params = mCamera.getParameters(); 
    params.setFlashMode(effect); 
    mCamera.setParameters(params); 

} 
public List<Camera.Size> getResolutionList() { 
    return mCamera.getParameters().getSupportedPreviewSizes(); 
} 
public void setResolution(int w, int h) { 
    disconnectCamera(); 
    mMaxHeight = h; 
    mMaxWidth = w; 
    connectCamera(getWidth(), getHeight()); 
} 

public Camera.Size getResolution() { 
    return mCamera.getParameters().getPreviewSize(); 
} 

public void takePicture(final String fileName) { 
    this.mPictureFileName = fileName; 
    // Postview and jpeg are sent in the same buffers if the queue is not empty when performing a capture. 
    // Clear up buffers to avoid mCamera.takePicture to be stuck because of a memory issue 
    mCamera.setPreviewCallback(null); 

    // PictureCallback is implemented by the current class 
    mCamera.takePicture(null, null, this); 
} 

@Override 
public void onPictureTaken(byte[] data, Camera camera) { 
    // The camera preview was automatically stopped. Start it again. 
    mCamera.startPreview(); 
    mCamera.setPreviewCallback(this); 

    // Write the image in a file (in jpeg format) 
    try { 
     FileOutputStream fos = new FileOutputStream(mPictureFileName); 
     fos.write(data); 
     fos.close(); 
    } catch (java.io.IOException e) { 
     Log.e("PictureDemo", "Exception in photoCallback", e); 
    } 

} 

public void cameraRelease() { 
    if(mCamera != null){ 
     mCamera.release(); 
    } 
} 
} 

请任何一个可以帮助我,或者建议以其他方式启动相机闪光灯。 谢谢你的高级。

+0

? – sasikumar

+0

yes如下所示:01-06 13:45:18.292 15148-15148/org.opencv.samples.facedetect E/AndroidRuntime:致命例外:main java.lang.RuntimeException:无法启动活动ComponentInfo {org.opencv.samples .facedetect/org.opencv.samples.facedetect.FdActivity}:java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967) – Albert

回答

1

我找到了解决办法从这个链接Using Camera LED Flash with OpenCV on Android

应用这个类,它只是非常完美:)

下面是我实现类:你有任何错误

private static final String TAG = "Sample::Tutorial2View"; 

private Context my reference; 

private static boolean isFlashLightON = false; 

public Tutorial2View(Context context, AttributeSet attrs) { 
super(context, attrs); 
this.myreference = context; 
} 

public List<String> getEffectList() { 
return mCamera.getParameters().getSupportedColorEffects(); 
} 

public boolean isEffectSupported() { 
return (mCamera.getParameters().getColorEffect() != null); 
} 

public String getEffect() { 
return mCamera.getParameters().getColorEffect(); 
} 

public void setEffect(String effect) { 
Camera.Parameters params = mCamera.getParameters(); 
params.setColorEffect(effect); 
mCamera.setParameters(params); 
} 

public List<Size> getResolutionList() { 
return mCamera.getParameters().getSupportedPreviewSizes(); 
} 

public void setResolution(Size resolution) { 
disconnectCamera(); 
mMaxHeight = resolution.height; 
mMaxWidth = resolution.width; 
connectCamera(getWidth(), getHeight()); 
} 

public Size getResolution() { 
return mCamera.getParameters().getPreviewSize(); 
} 

// Setup the camera 
public void setupCameraFlashLight() { 
Camera camera = mCamera; 
if (camera != null) { 
Parameters params = camera.getParameters(); 

if (params != null) { 
    if (isFlashLightON) { 
     isFlashLightON = false; 
     params.setFlashMode(Parameters.FLASH_MODE_OFF); 
     camera.setParameters(params); 
     camera.startPreview(); 
    } else { 
     isFlashLightON = true; 
     params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(params); 
     camera.startPreview(); 

     } 
    } 
} 

}