Articles of 预览

如何从睡眠中恢复相机预览?

我有一个应用程序,显示相机预览,我希望用户能够把手机睡觉,然后唤醒,以便我的应用程序将正确恢复。 问题是,从睡眠中返回时,相机预览不会重新启动。 我已经在api演示中实现了相机预览,但是似乎api演示示例只是通过纯粹的运气才起作用。 在示例中,屏幕方向被强制为横向,这意味着每次手机进入hibernate状态时手机都将进行configuration更改,因为locking屏幕处于纵向模式。 如果在相机预览应用程序(如我的)中使用肖像模式,则会出现bug表面。 我已经认识到这个bug与表面视图的娱乐有关。 当onPause时,表面应该被销毁,然后在onResume之后重新创build,但是在睡觉时不会发生。 看来,我必须摧毁整个活动,然后重新创build它,让相机预览再次工作。 我希望能够重新创build表面视图。 除了重新创build整个活动外,是否有办法强制表面视图的重新创build?

预览不显示在Android 3.0加那利

我已经开始使用最新的Android Studio 3.0,但我有一个与预览的问题。 它不显示预览选项卡中的预览。 这是我所做的 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white"> <include android:id="@+id/activePlanCard" layout="@layout/layout_item_activated_plan" /> <TextView android:id="@+id/DashView" android:layout_width="match_parent" android:layout_height="10dp" android:layout_below="@id/activePlanCard" android:background="@drawable/drw_dash_line" /> <TextView android:id="@+id/provideAddress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/DashView" android:layout_margin="10dp" android:text="Provide Address Detail :" /> </RelativeLayout> </ScrollView> </layout> 在这个问题上的帮助将不胜感激 谢谢..

Android相机预览 – 如何“冻结”相机?

我目前正试图build立一个android应用程序来拍照,我需要冻结给定的事件(即照片拍摄)的相机预览,并只有在另一个事件后重新启动它。 换句话说,我想要的是让视图显示照相机看到的任何东西,直到冻结事件发生,然后冻结图像(即在该事件发生时显示屏幕上的内容 – 就像拍摄照片一样)直到解冻事件发生。 现在,我正在使用一个SurfaceView和SurfaceHolder.Callback来做到这一点,我试图用一个PreviewCallback来冻结屏幕,但不幸的是,我找不到一个例子或教程,我真的被困在这个点。 如果任何人有一个指导或如何做到这一点的指示,我真的很感激帮助… 我粘贴下面的代码的相关部分: 公共类CustomCameraView扩展SurfaceView { Camera camera; SurfaceHolder previewHolder; //Callback for the surfaceholder SurfaceHolder.Callback surfaceHolderListener = new SurfaceHolder.Callback() { public void surfaceCreated(SurfaceHolder holder) { camera=Camera.open(); try { camera.setPreviewDisplay(previewHolder); } catch (Throwable t) { } } public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int w, int h) { Parameters params = camera.getParameters(); params.setPictureFormat(PixelFormat.JPEG); […]

如何更改Android Studio上的布局预览默认设备

当我创build一个新的布局时,默认设备是Nexus 4.我如何更改默认设备,当我下次创build新的布局时,设备将是Nexus 5,但不是nexus 4。

android如何处理预览大小/比率和实际SufaceView大小之间的差异?

我正在写一个小型的android应用程序,用户可以在相机的实时预览中放置一个图像,并拍下这个照片。 该应用程序将结合这两个适当的图像 – 所有这一切都工作正常。 我知道你可以使用Camera.getParameters()来获取/设置PreviewSize,我认为这与实时“摄像头”的大小有关。 但是,显示相机预览的SurfaceView的大小与报告的(和使用的)PreviewSizes不同。 例如,在模拟器中,我可用的SurfaceView碰巧是360×215,而PreviewSize是320×240。 尽pipe如此,整个SurfaceView仍然充满了预览。 但是最终产生的图片是(也?)320×240。 android如何弥补这些尺寸和长宽比的差异? 图像是否被截断? 或者我只是误解了预览大小是关于什么 – 这是关系到生成的图片的大小,还是它与投影在SurfaceView上的“实时预览”有关? 有没有不平凡的相机的例子,处理这个? 我需要知道如何进行转换,最终将图像正确地复制/缩放到照片中,从而解决这些问题。

Android相机预览映射到最终的图片

我们一直在构build一个定制的Android相机Activity,其中一个矩形覆盖在相机预览中,当捕获照片(按下button)时,我们要裁剪最终图像的对应矩形区域。 问题是,我们还没有弄清楚android如何将预览屏幕映射到最终的图像。 我们尝试了下面的公式,但只适用于某些情况: 设x和y为矩形左上angular的坐标,如相机预览所示。 让preview_width和preview_height是相机预览的宽度和高度。 这些是得到使用getBestPreviewSize()函数,循环通过支持的预览大小,并select较大的一个。 假设他们是1280和720。 让picture_width和picture_height成为相机所支持的最终图片的宽度和高度。 对于我们的目的,假设这是1632 * 1224(在索尼爱立信XPERIA这相当于2 MP)。 我们想要findx_map,y_map,这是最终图像的裁剪矩形的x和y。 然后用类比法则,我们使用的公式是: x_map = picture_width * x / preview_width; y_map = picture_height * y / preview_height; 但是,这似乎并不适用于所有情况。 我们发现,当手机的屏幕尺寸与预览尺寸相似时,这个公式几乎可以工作(近似,误差很小)。 但对于其他情况下,如索尼XPERIA手机屏幕尺寸是:宽度:480和高度:854,公式失败。 例如,对于x = 50,则x_map = 1632 * 50/1280 = 63.75然而,如从最终图片裁剪的矩形区域所示,该数字并不真正对应于预览区域中的矩形。 它走了。 我们的公式没有考虑到屏幕尺寸,尽pipe试图修改屏幕尺寸,并没有产生任何理想的结果。 我们怀疑,预览大小和最终图片之间的映射不知怎么考虑了屏幕尺寸,但还没有弄清楚到底是什么,因为没有文档,广泛searchnetworking上的答案后,没有什么相关的。 我们认为在应用类比法则之前,我们需要考虑到一定的比例因子和纵横比,因为公式工作的很好。 你知道上述的一个正确的公式吗?

相机 – 开始录制video后预览更改

我在横向模式下自定义全屏相机。 设备尺寸是1024 x 600。 支持预览大小列表 宽x高 176 x 144 320 x 240 352 x 288 528 x 432 640 x 480 1024 x 576 1024 x 768 支持的video大小列表 宽x高 176 x 144 320 x 240 352 x 288 640 x 480 720 x 480 1280 x 720 没有setPreviewSize,我的预览是从顶部和底部压缩,从左侧和右侧更长。 我的预览getOptimalPreviewSize返回1024 x 576大小,并且附近的video大小是1280 x 720 因此,设置video大小并开始录制video mediaRecorder.setVideoSize(1280,720); […]

在Android 7中的相机预览黑色

为了向后兼容,我使用了一个简单的Camera API 。 相机视图本身被一个imageview稍微覆盖,我的surfaceChanged这样做: camera.setPreviewCallback((data, arg1) -> LiveView.this.invalidate()); camera.setPreviewDisplay(mHolder); camera.startPreview(); 在所有较旧的设备上工作正常。 我将预览大小设置为surfaceCreated较早的最大可用大小。 然而,在Android 7.1上,它突然变黑了(在Nexus 6和Moto X Play上,可能还有其他的 – 在不同的设备上)。 SurfaceView本身在Layout Inspector ( willNotDraw = true )中是灰色的,但是VISIBLE (和硬件加速)。 奇怪的是,我仍然可以拍照,事件没有预览,预览callback中的数据包含一个图像。 同时我得到以下日志 E/mm-camera: mct_pipeline_send_ctrl_events: Send Set Parm events E/QCamera2HWI: static void* qcamera::QCameraCbNotifier::cbNotifyRoutine(void*) : cb message type 32768 not enabled! E/QCamera2HWI: static void* qcamera::QCameraCbNotifier::cbNotifyRoutine(void*) : cb message type 32768 […]

如何获得720p的Android相机预览数据?

我想用相机预览进行图像识别。 出于我的目的,我需要预览分辨率尽可能高(同时向用户显示预览)。 我创build了一个Preview类,扩展了SurfaceView并将PreviewSize设置为1280×720。 我添加了一个PreviewCallBack来获取实时图像: camera = Camera.open(); parameters = camera.getParameters(); parameters.setPreviewSize(1280,720); camera.setParameters( parameters); byte[] b = new byte[camera.getParameters().getPreviewSize().width * camera.getParameters().getPreviewSize().height * ImageFormat.getBitsPerPixel(camera.getParameters().getPreviewFormat()) / 8]; camera.addCallbackBuffer(b); camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback()); try { camera.setPreviewDisplay(this.getHolder()); camera.startPreview() } 我的字节数组b是1382400字节和我的CameraPreviewCallback.onPreviewFrame()函数接收这些1382400字节 – 但只有第一个497664字节包含数据(匹配768×432分辨率(HTC Desire))。 我在不同的设备上testing过,所有的显示分辨率都是800×480(HTC Desire,LG Optimus 3D,Samsung Galaxy S2,Samsung Galaxy Tab …)。 我的代码唯一的设备是HTC Desire HD。 有谁知道如何获得完整的720p分辨率作为一个字节数组? “某事”似乎降低了预览分辨率以适应智能手机显示屏。 问候 Joern

Android OCR tesseract:使用来自Pixa对象的数据来显示边界框

我目前在Android上玩OCR。 因此,我写了一个带有Camera预览的小应用程序,现在我正在从我的onPreviewFrame方法提供tessearact工具(tess-two)图像。 现在我想在我的相机预览中显示来自OCR的边界的六边形。 TessBaseAPI提供了返回字符/单词布局框的方法。 返回的对象的types是Pixa,就像tess-2提供的leptonica库一样。 所以我的问题是: 我如何获得可用的坐标,我可以使用从我的相机预览从getCharacters()返回的Pixa对象或从TessBaseAPI getWords()预览的边界框? GetAPharacters()和getWords()在BaseAPI中 leptonicas Pixa类 重要: 由于预览只支持图像格式是YUV N21和我已阅读tess-API要求ARGB_8888位图我远离我的onPreviewFrame方法之前,我将位图提供给TessAPI之前有以下解决方法:(我也旋转由于我以纵向方向使用相机,但顺时针旋转90度,但相机预览帧进入横向) //byte[] bmpdata <- the image in a byte array (NV21 Imageformat) in onPreviewFrame YuvImage yuvimage = new YuvImage(bmpdata,ImageFormat.NV21,width,height,null); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); Rect rect = new Rect(0, 0, width, height); yuvimage.compressToJpeg(rect, 100, outStream); Bitmap bmp = BitmapFactory.decodeByteArray(outStream.toByteArray(),0,outStream.size()); Matrix mtx = […]