我的要求是既不显示相机预览,也不使用图像捕捉相机的意图。
在那里,我找到了一种适用于我的第一台测试设备(Galaxy tab 7)的方法。
我的捕获图像
功能如下所示
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);
}
}
和< code>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;
}
现在我面临着在不同设备上成功运行上述代码的困难。
三星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个设备导致问题,所以是否有任何标准方法可以从相机获取图像而没有意图
请注意,我包括在清单中
更新:在4.1 Nexus Galaxy从Camera.java类的第1061行获取图片失败
,这里是类链接,它给了我native_takePicture(msgType)的信息;Camera.java
中的函数确实抛出了那个
您需要使用Camera.setOneShotPreviewCallback方法然后处理图像
尝试使用YuvImage并在将它传递给bitmapfactory之前进行压缩,如下所示:
YuvImage yuvimage = new YuvImage(byteArr, ImageFormat.NV21, width, height, null);
Rect rect = new Rect(0, 0, width, height);
ByteArrayOutputStream outstr = new ByteArrayOutputStream();
yuvimage.compressToJpeg(rect, 100, outstr);
Bitmap bm = BitmapFactory.decodeByteArray(outstr.toByteArray(), 0, outstr.size());
编辑:
您必须使用表面视图,但表面视图可以隐藏在另一个视图下方,因此它在屏幕上不可见,但仍然存在并处于活动状态。
经过几次搜索,我发现相机的预览是必要的,我想知道我的代码如何在某些设备上运行良好,即使它有故障。
任何解决办法都是,
我们需要相机预览保持在表面视图,我们可以隐藏在任何其他视图后面的表面视图,我在framelayout中拍摄表面视图(我知道它已弃用),在它上面我拍摄图像视图,对于表面视图,我只拍摄80*80 dp表面视图,因为像30*30 dp这样的小表面视图不起作用,并且再次通过错误。
android设备中的相机处理是主要的问题——不同的设备(甚至同一设备上的android版本)可能并且肯定会有不同的行为。基本上你是在和设备上的一些恶魔进程说话,它们彼此是不同的。
我没有解决所有问题的方法,但这是我迄今为止的发现
我已经开发了一些为JavaOCR项目开发的相机管理东西,它适用于大多数设备。随意使用这个作为灵感:
http://SourceForge . net/p/javaocr/code/240/tree/trunk/demos/camera-utils/src/main/Java/net/SF/javaocr/demos/Android/utils/camera/camera manager . Java
我正在尝试实现ESAPI编码以防止在我的spring-mvc项目中进行XSS攻击。我的方法是在发送回响应中的输入之前,我将使用 ESAPI.encoder() 对其进行编码,以便在页面响应中对输入属性进行编码。 我的假设是,当我返回编码的响应时,在我的页面响应中,我将得到编码的字符,而在我的输入字段中,我会得到普通的字符,但我的输入域也设置了编码的字符。 下面是我在发送响应之前在控制器中编写的示例
但是为了全屏显示相机预览,我将TextureView更改为match_parent。这样做,输出就改变了。现在预览的相机是不同的图像捕获。 请检查这里附上的图像。 1、相机预览:-相机预览截图 我也尝试在camera preview builder和image reader中设置CaptureRequest.Scaler_Crop_Region,但它没有像预期的那样工作。
我正在尝试使用Intent打开文件。操作\u获取\u类似于此帖子的内容: Android打开一个文件与ACTION_GET_CONTENT结果到不同的Uri的 但是这里只是一个解决方案,如何使用不同的SDK/文件夹获取文件名,而不是不同的设备。获得Uri的意图也保持不变。 我想开门。png文件。 Uri.getPath()为两个设备(都. png文件存储在下载文件夹): 因此,问题是,如果我使用
现在,我有下面的代码,它只是测试标准库中的< code>std::set_difference: 当我用Clang/GCC编译它时,我得到了输出: 更新我想实际使用的源代码案例(假设是我将要做的一些操作。因此,这些操作将按的顺序发生): 好吧,这看起来不错,它实际上对应于标准::set_difference,检查链接:但是当我选择MSVC时,我得到了不同的输出(检查链接:https://godbo
我有相同的图像和相同大小的画布,但是输出是不同的。我想要同样的输出,该怎么做呢?
代码: 这就是我初始化相机的方式。 I',试图获得设备的分辨率,并在此基础上设置相机的宽度和高度。 问题是。 我认为精灵不会在更高分辨率的设备上缩放。 根据我的知识和引擎本机缩放相机和精灵。 那么为什么精灵在这种情况下不会被缩放呢? 我应该如何根据分辨率放大精灵? 我也试过FillResolutionPolicy。同样的事情。 我用的是TexturePackerExtension of anden