我按照https://developer.android.com/guide/topics/media/camera.html激活Android 4的自定义相机,但我的捕捉功能完全不起作用。下面是我的代码:
cameraf.java:
public class cameraf extends AppCompatActivity{
private Preview mPreview;
private Camera mCamera;
private static final String TAG = "Myact";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cameraf);
mCamera = getCameraInstance();
mPreview = new Preview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.setOnTouchListener(new View.OnTouchListener(){
public boolean onTouch(View v, MotionEvent event){
Log.v(TAG, "will now take picture");
mCamera.takePicture(null, null, mPicture);
return true;
}
});
preview.addView(mPreview);
}
private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Log.v(TAG, "Getting output media file");
File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
if (pictureFile == null) {
Log.v(TAG, "Error creating output file");
return;}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
Log.v(TAG, e.getMessage());
} catch (IOException e) {
Log.v(TAG, e.getMessage());}
}
};
public static final int MEDIA_TYPE_IMAGE = 1;
private static File getOutputMediaFile(int type){
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyCameraApp");
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("MyCameraApp", "failed to create directory");
return null;}
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
} else {
return null;}
return mediaFile;
}
public static Camera getCameraInstance(){
Camera c = null;
try {
c = Camera.open(); // attempt to get a Camera instance
}
catch (Exception e){
}
return c; // returns null if camera is unavailable
}
public class Preview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
public Preview(Context context, Camera camera) {
super(context);
mCamera = camera;
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(holder);
mCamera.setDisplayOrientation(90);
Camera.Parameters params = mCamera.getParameters();
params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(params);
} catch (IOException exception) {
mCamera.release();
mCamera = null;}
}
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(w, h);
mCamera.startPreview();
}
}
private void releaseCamera(){
if (mCamera != null){
mCamera.release(); // release the camera for other applications
mCamera = null;
}
}
}
我已经添加了清单中的权限,这是使用权限Android:名称="android.permission.相机",使用权限Android:名称="android.permission.WRITE_EXTERNAL_STORAGE"
但从上面的代码可以让我打开相机,但当我在屏幕上点击它成为错误,无法存储图像。所以有人能和我分享想法吗?
您看到的故障可能会发生,因为您没有设置图片大小。有些设备需要这样做。
请注意,您必须选择一种支持的大小,并确保图片大小和预览大小同步(即具有相同的纵横比)。
您无法设置从曲面视图大小派生的预览大小…实际上,您没有:您的调用
parameters.setPreviewSize(w, h);
后面不是
mCamera.setParameters(parameters);
我最近开始学习oracle和SQL。在学习过程中,我遇到了几个问题,我的朋友在一次采访中被问到。 此查询生成Employees表中的所有行。至于我所理解的Oracle在列中搜索数据,那么,NULL,这里是作为列名处理的吗?我说Oracle在列中搜索数据是正确的吗?Oracle怎么会给出这个查询中的所有行呢?在WHERE子句中,条件的左手边不一定是列名吗?它不应该抛出一个错误吗? 不给出选定的行。
问题内容: 我必须编写一个例程,如果变量的类型为,则将变量的值加1,否则将变量的值分配为0,其中变量的初始值为或。 第一个实现是因为我认为没有数字会使算术表达式为假,但是由于计算为真,所以这是错误的。然后,我得知行为类似于0,并且以下表达式均被评估为true。 当然不是0。被评估为false。这使看似重言式的表达成为错误。 为什么实际上不是0,却像0? 问题答案: 您真正的问题似乎是: 为什么:
问题内容: 我正在阅读本文: 在SQL中获取null == null 共识是,当尝试测试两个(可空)sql列之间的相等性时,正确的方法是: 当A和B为时,(A = B)仍返回FALSE,因为NULL不等于NULL。这就是为什么需要额外检查的原因。 检验不平等情况如何?经过以上讨论,我认为要测试不平等,我需要做一些类似的事情: 但是,我注意到这不是必需的(至少在informix 11.5上没有),我
问题内容: 我希望在可为空的列上搜索数据库表。有时,我要搜索的值本身就是NULL。由于Null等于零,甚至NULL,所以说 将失败。现在我不得不求助于 有没有更简单的说法呢? (如果重要的话,我正在使用Oracle) 问题答案: 您可以做IsNull或NVL东西,但这只会使引擎做更多的工作。您将调用函数进行列转换,然后必须将结果进行比较。 用你所拥有的
Jasmine提供了一种不同的方法来检查实际输出是否为Null,已定义或未定义。 在本章中,我们将学习如何实现不同的Jasmine方法来检查上述场景。 toBedefined() 此匹配器用于检查代码中的任何变量是否已预定义。 让我们根据这个例子修改我们的customerMatcherSpec.js文件。 currentVal = 0; describe("Different Methods
大部分现代语言使用某些方法去解决了这个问题,Kotlin的方法跟别的相似的语言比是相当另类和不同的。但是黄金准则还是一样:如果变量是可以是null,编译器强制我们去用某种方式去处理。 指定一个变量是可null是通过在类型的最后增加一个问号。因为在Kotlin中一切都是对象(甚至是Java中原始数据类型),一切都是可null的。所以,当然我们可以有一个可null的integer: val a: In