从 更新到 后,androidx.camera:camera-view:1.0.0-alpha32我androidx.camera:camera-view:1.1.0-beta01在使用时收到下一个错误CameraX
camerax_version = "1.0.2"
// CameraX
implementation "androidx.camera:camera-core:$camerax_version"
implementation "androidx.camera:camera-camera2:$camerax_version"
implementation "androidx.camera:camera-lifecycle:$camerax_version"
implementation "androidx.camera:camera-view:1.1.0-beta01"
Run Code Online (Sandbox Code Playgroud)
错误
java.lang.IllegalStateException: CameraX is not configured properly. The most likely cause is you did not include a default implementation in your build such as 'camera-camera2'.
at androidx.camera.core.CameraX.<init>(CameraX.java:109)
at androidx.camera.lifecycle.ProcessCameraProvider.getOrCreateCameraXInstance(ProcessCameraProvider.java:181)
at androidx.camera.lifecycle.ProcessCameraProvider.getInstance(ProcessCameraProvider.java:167)
Run Code Online (Sandbox Code Playgroud) 我正在尝试让相机在我的应用程序中运行,而我对整个camera.release()事情都有疑问; 我正在做非常复杂的事情并且没有明确的方式来简单地调用camera.release()所以我必须继续尝试新方法,但每次我弄错了我的应用程序崩溃(如预期的那样),让相机不被释放.因此,为了能够再次测试我的应用程序,我需要重新启动手机才能刷新相机.
有没有办法通过终端或DDMS释放相机,还是通过重新启动手机释放相机的唯一方法?它已经变得很老了,特别是当一个小错误导致浪费时间等待我的手机重新启动时.
谢谢!
Camera.setDisplayOrientation 的文档页面包含以下代码示例,声明使用它将"使摄像机图像以与显示相同的方向显示":
public static void setCameraDisplayOrientation(Activity activity,
int cameraId, android.hardware.Camera camera) {
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId, info);
int rotation = activity.getWindowManager().getDefaultDisplay()
.getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}
int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // …Run Code Online (Sandbox Code Playgroud) 我想构建一个Web应用程序(Html5 + Javascript,没有闪存),使用智能手机相机,扫描QR码,并将结果发送到服务器.那可能吗?
谢谢!
我目前正在开发一种扫描仪,可以读取一张图像中的多个QR码.我设法读取图像中的QR码,但它给了我不一致的结果.假设图像中有4个QR码,有时我可以读取2个,有时3个或仅1个.与原始扫描仪(ZXing扫描仪)不同,它可以快速解码.在我的情况下,我必须确保有足够的光线,图像不会模糊解码.
我正在使用它QRCodeMultiReader来解码图像.目前正在使用ZXingLibrary来创建应用程序.
以下是我的代码片段:
public void onPictureTaken(byte[] data, Camera camera) {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inMutable = true;
Bitmap bitmap = BitmapFactory
.decodeByteArray(data, 0, data.length, opt);
Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
LuminanceSource source = new RGBLuminanceSource(bitmap);
QRCodeMultiReader multiReader = new QRCodeMultiReader();
Result[] results = multiReader.decodeMultiple(new BinaryBitmap(
new HybridBinarizer(source)), hints);
}
Run Code Online (Sandbox Code Playgroud) 我在我的Android应用程序中有一个相机预览.你可能都知道它是由surfaceviewandroid 实现的.
在我的照片应用程序中,允许用户拍照,我想模糊相机预览(表面视图),如果用户还没有登录,如果用户登录,我将显示正常预览(没有模糊)
模糊如同 
但似乎没有办法做到这一点
我想到了几件事,但我不确定如何实现它
另一种方法是更改窗口的属性,但我无法对surfaceview执行此操作,
getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
Run Code Online (Sandbox Code Playgroud)那么我们可以创建一个窗口覆盖surfaceview并设置这样的标志吗?我不这么认为
谁能告诉我如何模糊相机预览,这是一个表面视图
注意:我试图模糊一个区域,这是相机预览的输出,所以它不像我模糊静态图像,模糊区域将根据你的手机相机的位置而改变
我有自定义相机应用程序,我需要能够打开闪光灯(实际上是火炬模式)/关闭.
在这种情况下我需要什么样的许可?
1.Only
<uses-feature android:name="android.hardware.camera"/>
<uses-permission android:name="android.permission.CAMERA"/>
Run Code Online (Sandbox Code Playgroud)
2.来自1加:
<permission android:name="android.permission.FLASHLIGHT"
android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
android:protectionLevel="normal"/>
Run Code Online (Sandbox Code Playgroud)
我想这是在你想使用Flash时使用的,但没有相机(就像在这种情况下:Android - 使用相机Flash)
3.从1加:
<uses-permission android:name="android.hardware.camera.flash"/>
Run Code Online (Sandbox Code Playgroud)
EDITED(感谢@maclir):
以上行不正确.正确的是:
<uses-permission android:name="android.permission.CAMERA"/>
Run Code Online (Sandbox Code Playgroud)
developer.android.com:"Subfeature.该应用程序使用设备相机的闪光灯." (http://developer.android.com/guide/topics/manifest/uses-feature-element.html)
在所有3个案例中,在2个设备上测试,工作正常 - 我可以激活/停用闪光灯,但我想确定它们的确切含义.奇怪的是,即使没有选项3,它也能正常工作......对于什么比使用选项3?
我想我错过了一些东西......
回答
<uses-permission android:name="android.permission.CAMERA" />
Run Code Online (Sandbox Code Playgroud)
是必须的,以便使用相机(我没有通过Intent使用相机,我有一个自定义相机应用程序)
和:
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
Run Code Online (Sandbox Code Playgroud)
是我在应用程序中使用的相机特定功能.
android:required="false"表示Google Play 不会阻止将应用程序安装到不包含这些相机功能的设备上 - 因此拥有没有相机和相机闪光灯的设备的用户将能够从市场上安装该应用程序.
http://developer.android.com/reference/android/hardware/Camera.html
我正在写一个相机应用程序,每当我调用camera.open()应用程序崩溃然后我收到此错误:
W/CameraBase? An error occurred while connecting to camera: 0
这是我打开相机的方式:
public void getCameraInstance(){
mCamera = null;
try
{
mCamera = Camera.open(); // attempt to get a Camera instance
}
catch (Exception e)
{
// Camera is not available (in use or does not exist)
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
如果您正在阅读本文,请注意这是原始相机API,不再适用最新版本的相机API(相机2).
从这一点开始,您应该使用camera2 api,因为它具有更强大的功能,并且还具有更好的图像处理流水线.
注意仅限于排除API 21(Lolipop),即不适用于Lolipop及以上.
我正在编写一个应用摄像头的应用程序,将其转换为rgb,以便进行一些处理.
它适用于使用NV21 Yuv格式的旧相机实现.我遇到的问题是使用新的Yuv格式YUV_420_888.在新的Camera2 Api中,图像不再正确转换为RGB,后者发送YUV_420_888 yuv格式而不是NV21(YUV_420_SP)格式.
有人可以告诉我如何将YUV_420_888转换为RGB?
谢谢
我正在尝试使用Android相机,对于API 23或更高版本,它需要在运行时请求权限.根据文档,我可以使用ActivityCompat或ContextCompat来实现.我不明白这两者之间有什么区别和他们的权衡.
谢谢你的时间.
android android-camera android-camera-intent android-camera2