相关疑难解决方法(0)

从相机拍摄照片无需预览

我正在编写一个Android 1.5应用程序,它在启动后启动.这是一个Service,应该拍照没有预览.此应用程序将记录某些区域的光密度.我能够拍照,但照片是黑色的.

经过长时间的研究,我遇到了一个关于它的bug线程.如果您不生成预览,则图像将为黑色,因为Android相机需要预览才能设置曝光和对焦.我创建了一个SurfaceView和听众,但onSurfaceCreated()事件永远不会被解雇.

我想原因是,表面没有在视觉上创造.我还看到了静态调用相机的一些例子,MediaStore.CAPTURE_OR_SOMETHING它们拍摄照片并用两行代码保存在所需的文件夹中,但它也没有拍照.

我是否需要使用IPC并bindService()调用此功能?或者是否有另一种方法来实现这一目标?

android android-service android-camera

57
推荐指数
7
解决办法
7万
查看次数

Android:如何使用回调显示相机预览?

我需要做的很简单,我想使用相机回调手动显示来自相机的预览,我想在真实设备上获得至少15fps.我甚至不需要颜色,我只需要预览灰度图像.来自相机的图像是YUV格式,你必须以某种方式处理它,这是主要的性能问题.我正在使用API​​ 8.

在所有情况下,我都使用camera.setPreviewCallbackWithBuffer(),它比camera.setPreviewCallback()更快.如果我没有显示预览,我似乎无法在这里获得大约24 fps.所以没有问题.

我试过这些解决方案:

1.在SurfaceView上将相机预览显示为位图.它有效,但性能约为6fps.

baos = new ByteOutputStream();
yuvimage=new YuvImage(cameraFrame, ImageFormat.NV21, prevX, prevY, null);

yuvimage.compressToJpeg(new Rect(0, 0, prevX, prevY), 80, baos);
jdata = baos.toByteArray();

bmp = BitmapFactory.decodeByteArray(jdata, 0, jdata.length); // Convert to Bitmap, this is the main issue, it takes a lot of time

canvas.drawBitmap(bmp , 0, 0, paint);
Run Code Online (Sandbox Code Playgroud)


2.在GLSurfaceView上将相机预览显示为纹理.这里我只显示亮度数据(灰度图像),这非常简单,每帧只需要一个arraycopy().我可以得到大约12fps,但我需要在预览中应用一些过滤器,看起来,它无法在OpenGL ES 1中快速完成.所以我不能使用这个解决方案.另一个问题中的一些细节.


3.使用NDK在(GL)SurfaceView上显示相机预览以处理YUV数据.我在这里找到了一个使用一些C函数和NDK 的解决方案.但我没有设法使用它,这里有更多细节.但无论如何,这个解决方案是为了返回ByteBuffer在OpenGL中将其显示为纹理,并且它不会比之前的尝试更快.所以我必须修改它以返回int []数组,可以使用canvas.drawBitmap()绘制,但我不理解C足以执行此操作.


那么,我有没有其他方法可以避免或尝试一些改进?

java camera android preview android-camera

14
推荐指数
2
解决办法
2万
查看次数

如何将SurfaceTexture保存为位图

当我将视频解码到表面时,我想将我想要的帧保存为位图/ jpeg文件.我不想在屏幕上绘图,只想将SurfaceTexture的内容保存为图像文件.

android decoder opengl-es-2.0 mediacodec

7
推荐指数
2
解决办法
1万
查看次数

我可以在没有预览的情况下使用Android Camera吗?

我在Android中创建了一个使用相机的应用程序,我可以测量用户脸部与手机屏幕之间的距离.

问题描述:

现在我想让它运行后台,以便在我使用其他应用程序时可以使用该功能.这意味着我应该在没有预览的情况下打开相机,并在服务中处理它.

我做了什么:

我在这里提到了一些问题

如何从应用程序的背景录制视频:Android

如何在后台使用Android相机?

从相机拍摄照片无需预览

API级别16

我的服务文件

import android.app.Service;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Size;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
import java.util.List;

public class RecorderService extends Service {
private static final String TAG = "RecorderService";
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
private static Camera mServiceCamera;
private boolean mRecordingStatus;
private MediaRecorder mMediaRecorder;
File path = android.os.Environment.getExternalStorageDirectory();


@Override
public void onCreate() {
    Log.i(TAG,"onCreate");
    mRecordingStatus …
Run Code Online (Sandbox Code Playgroud)

android android-service

4
推荐指数
1
解决办法
1万
查看次数