gpt4 book ai didi

android - 无意识地捕捉图像,在不同的设备上提供不同的输出

转载 作者:IT老高 更新时间:2023-10-28 23:35:24 27 4
gpt4 key购买 nike

我的要求既不是显示相机预览,也不是使用相机 Intent 进行图像捕捉。

我找到了一种适用于我的第一台测试设备(Galaxy tab 7")的方法。

我的CaptureImage函数如下

private void CaptureImage() {
int FrontCameraFound = getCameraID();
if (FrontCameraFound != -1) {
mCamera = Camera.open(FrontCameraFound);

parameters = mCamera.getParameters();

mCamera.setParameters(parameters);
mCamera.startPreview();

Camera.PictureCallback mCall = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {

bmp = BitmapFactory.decodeByteArray(data, 0, data.length);

// set bitmap tp image view just to check
// if image capture proper, testing purpose
iv_image.setImageBitmap(bmp);

mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
};
mCamera.takePicture(null, null, mCall);
}
}

getCameraID功能如下

private int getCameraID() {
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();

for (int camIdx = 0; camIdx < Camera.getNumberOfCameras(); camIdx++) {
Camera.getCameraInfo(camIdx, cameraInfo);
// for capture image from back camera
// If want to capture from front
// then change it to CAMERA_FACING_FRONT
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
try {
return camIdx;
} catch (RuntimeException e) {

}
}
}
return -1;
}

现在我很难在不同设备上成功运行上述代码。

  • Samsung Galaxy S+ (2.3.6):前置摄像头始终返回绿色图像,但后置摄像头编码工作正常。
  • Samsung Galaxy Nexus (4.1):编码不起作用 无论是前置摄像头还是后置摄像头,都出现“takePicture”失败。
  • LG Optimus Net (2.3.4):只有后置摄像头并且工作正常。
  • Samsung Galaxy Tab 7"(2.3.3):两个摄像头都工作正常。
  • Motorola Xoom (3.1):两个摄像头都可以正常工作。

三星 Galaxy Nexus 的 Logcat:

09-21 09:37:42.125: E/AndroidRuntime(4647): Caused by: java.lang.RuntimeException: takePicture failed
09-21 09:37:42.125: E/AndroidRuntime(4647): at android.hardware.Camera.native_takePicture(Native Method)
09-21 09:37:42.125: E/AndroidRuntime(4647): at android.hardware.Camera.takePicture(Camera.java:1061)
09-21 09:37:42.125: E/AndroidRuntime(4647): at android.hardware.Camera.takePicture(Camera.java:1006)
09-21 09:37:42.125: E/AndroidRuntime(4647): at fortyonepost.com.pwop.TakePictureDemoActivity.CaptureImage(TakePictureDemoActivity.java:63)
09-21 09:37:42.125: E/AndroidRuntime(4647): at fortyonepost.com.pwop.TakePictureDemoActivity.onCreate(TakePictureDemoActivity.java:36)
09-21 09:37:42.125: E/AndroidRuntime(4647): at android.app.Activity.performCreate(Activity.java:5008)
09-21 09:37:42.125: E/AndroidRuntime(4647): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
09-21 09:37:42.125: E/AndroidRuntime(4647): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)

不可能检查每个设备的代码,我只是在 5 个设备上测试我的代码,2 个设备会导致问题,所以有没有任何标准方法可以在没有 Intent 和预览的情况下从相机获取图像。

请注意,我包含在 list 中并将最低 sdk 版本设置为 9

更新:在 Camera.java 类中第 1061 行的 4.1 Nexus Galaxy takePicture Failed 中,这里是 class link这给了我 native_takePicture(msgType); 的信息Camera.java 中的函数确实抛出了这个

最佳答案

Android 设备中的相机处理是主要的 PITA - 不同的设备(甚至同一设备上的 android 版本)可以而且肯定会有不同的行为。基本上,您正在与设备上的一些恶魔进程交谈,它们彼此不同。

我没有解决所有问题的方法,但这是我目前的发现

  • 并非所有分辨率都能正常工作,即使它们已在相机参数中宣传。您必须在设置相机时对其进行测试,以防出现问题
  • 预览数据通过映射的内存区域提供给您
  • 始终提供 NV21 格式并且应为默认格式,但我会查询相机设置。当您打开相机时,它可以从之前使用相机的其他应用程序中进行一些设置。 (据说打开相机时相机会重置为默认值)

我已经开发了一些为 JavaOCR 项目开发的相机管理工具,它适用于大多数设备。随意以此为灵感:

http://sourceforge.net/p/javaocr/code/240/tree/trunk/demos/camera-utils/src/main/java/net/sf/javaocr/demos/android/utils/camera/CameraManager.java

关于android - 无意识地捕捉图像,在不同的设备上提供不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12529718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com