标签: android-camera

如何获得720p Android Camera预览数据?

我想使用相机预览进行图像识别.出于我的目的,我需要尽可能高的预览分辨率(同时,向用户显示预览).

我创建了一个Preview类,扩展了SurfaceView并将PreviewSize设置为1280x720.我添加了一个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()
}
Run Code Online (Sandbox Code Playgroud)

我的字节数组b是1382400字节,我的CameraPreviewCallback.onPreviewFrame()函数接收那些1382400字节 - 但只有第一个497664字节包含数据(匹配768x432分辨率(HTC Desire)).

我在不同的设备上进行了测试,显示分辨率为800x480(HTC Desire,LG Optimus 3D,三星Galaxy S2,三星Galaxy Tab,......).我的代码唯一适用的设备是HTC Desire HD.

有谁知道如何作为字节数组获得完整的720p分辨率?"Something"似乎降低了预览分辨率以适应智能手机显示屏.

问候

Joern

android resolution preview android-camera

9
推荐指数
1
解决办法
5936
查看次数

Android相机 - 有时当我拍照时,应用程序冻结,相机无法使用

我已经构建了一个应用程序,可以在您触摸预览时拍照.我可以拍很多照片,但有时当我触摸预览拍照时,没有快门声,整个应用都冻结了.此外,在那之后,如果我尝试启动内置相机应用程序,我收到一条消息,说明相机无法使用.

我不知道这种行为的原因,它是随机发生的,当它发生时我必须重新启动设备(三星Galaxy S)才能再次使用相机.

在DDM中,崩溃后我可以看到以下行:keyDispatchingTimedOut

以下是相关代码:CameraActivity类:

public class CameraActivity extends Activity {
  private static final String TAG = "CameraDemo";
  Preview preview;

  public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    preview = new Preview(this);
    ((FrameLayout) findViewById(R.id.preview)).addView(preview);
    ((FrameLayout) findViewById(R.id.preview)).setOnTouchListener(preview); 

    Log.d(TAG, "Camera Activity Created.");

  }
}
Run Code Online (Sandbox Code Playgroud)

预览课程:

    class Preview extends SurfaceView implements SurfaceHolder.Callback, OnTouchListener {
    private static final String TAG = "Preview";

    SurfaceHolder mHolder;
    public Camera camera;
    Context ctx;
    boolean previewing = false;

    Preview(Context context) {
        super(context);
        ctx = context;
        // Install a SurfaceHolder.Callback so …
Run Code Online (Sandbox Code Playgroud)

crash camera android android-camera

9
推荐指数
2
解决办法
8897
查看次数

如何通过onPreviewFrame回调更改捕获的byte []帧的方向?

我试图搜索这个问题很多,但从未见过任何令人满意的答案,所以现在我有最后的希望.

我有一个onPreviewFrame回调设置.这给出了一个byte[]支持预览格式的原始帧(NV21H.264编码类型).

现在,问题是回调始终开始byte[]从固定方向给出帧,每当设备旋转它不反映到捕获的byte[]帧.我曾尝试与setDisplayOrientationsetRotation,但这些API的只反映了正在显示不是所有捕获的预览byte []框.

Android文档甚至说,Camera.setDisplayOrientation只影响显示预览,而不影响帧字节:

这不会影响onPreviewFrame(byte [],Camera),JPEG图片或录制视频中传递的字节数组的顺序.

最后,在任何API级别,有没有办法改变byte[]帧的方向?

android-camera

9
推荐指数
1
解决办法
6558
查看次数

将手机快速旋转180度,相机预览会颠倒

我有自定义相机应用程序.当我将手机旋转90度时,相机预览工作正常.但是当我将手机快速旋转180度时,相机预览会颠倒过来.有没有解决方案......

这是我的代码如下:

public class CustomCameraActivity extends Activity implements
    SurfaceHolder.Callback {

Camera camera;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
boolean previewing = false;
LayoutInflater controlInflater = null;
private Sensor mOrientaion1;
int cameraId = 0;
public final String TAG = "CustomCamera";
private SensorManager sensorManager;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.main);

    context = this;

    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    mOrientaion1 = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

    // setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    imageView = (ImageView) findViewById(R.id.imgError);

    getWindow().setFormat(PixelFormat.UNKNOWN);
    surfaceView = (SurfaceView) findViewById(R.id.camerapreview);
    surfaceHolder = surfaceView.getHolder();
    surfaceHolder.addCallback(this);
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    controlInflater = LayoutInflater.from(getBaseContext()); …
Run Code Online (Sandbox Code Playgroud)

camera android rotation android-camera android-orientation

9
推荐指数
1
解决办法
5914
查看次数

Android:没有用户界面拍照

我有兴趣为Android编写一个应用程序,在应用程序中的某个事件后,使用Android上的相机自动拍摄照片.

我需要的东西:

  • 没有预览照片

  • 没有按钮供用户按下拍照

  • 只需运行操作即可拍照并将其存储到相册中.

这是我在线教程尝试的一些代码:

public void snap(){
       mCamera = Camera.open();
       SurfaceView sv = new SurfaceView(getApplicationContext());


       try {
                  mCamera.setPreviewDisplay(sv.getHolder());
                  parameters = mCamera.getParameters();

                   //set camera parameters
                 mCamera.setParameters(parameters);
                 mCamera.startPreview();
                 mCamera.takePicture(null, null, mCall);

            } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }


       //Get a surface
         sHolder = sv.getHolder();

}
 Camera.PictureCallback mCall = new Camera.PictureCallback()
    {

       public void onPictureTaken(byte[] data, Camera camera)
       {
             //decode the data obtained by the camera into a Bitmap

             FileOutputStream outStream = null;
                  try{
                      outStream = …
Run Code Online (Sandbox Code Playgroud)

java android android-camera

9
推荐指数
1
解决办法
5859
查看次数

设置Android Photo EXIF方向

我编写了一个以编程方式捕获照片的Android活动.我想将图像保存为具有正确EXIF方向数据的JPEG(就像原生Android Camera应用程序自动执行一样).

这是实际拍摄照片的方法(我删除了try/catch块):

private void takePhoto() {

    camera = Camera.open();
    SurfaceTexture dummySurfaceTexture = new SurfaceTexture(0);
    camera.setPreviewTexture(dummySurfaceTexture);
    camera.startPreview();
    camera.takePicture(null, null, jpgCallback);
}
Run Code Online (Sandbox Code Playgroud)

...和回调:

private Camera.PictureCallback jpgCallback = new Camera.PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {

        releaseCamera();
        savePhoto(data);
};
Run Code Online (Sandbox Code Playgroud)

照片拍摄得当,但我的问题是EXIF数据显示方向设置为"图像方向:顶部,左手",无论设备的方向如何,因此当我上传照片时,它会显示为颠倒或旋转.

我是否真的需要手动捕捉设备方向(滚动,俯仰,方位角)并自己编写EXIF方向?Camera应用程序如何自动正确地写入此数据?有谁知道正确设置此属性的方法?

编辑:我无法使用屏幕方向,因为活动被锁定为纵向模式.

camera android exif android-camera android-orientation

9
推荐指数
2
解决办法
8602
查看次数

SurfaceView vs TextureView for Camera?

我想在我的应用程序中加入一个相机功能,这将允许视图本身的布局过渡,更改其大小,预览大小和有效处理方向更改.我应该使用TextureViewSurfaceView

决定决定..

android surfaceview android-camera textureview

9
推荐指数
1
解决办法
8358
查看次数

获取W/Activity:一次只能请求一组权限

我制作了一个应用程序,它有摄像头和GPS的请求,但是当我执行时,我会多次收到此警告,而不到1秒.

W/Activity:一次只能获取一组权限)

有人可以告诉我为什么吗?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = getIntent();
    mStatusCamera = intent.getStringExtra("camera");
    mScannerView = new ZXingScannerView(this) {

        @Override
        protected IViewFinder createViewFinderView(Context context) {
            return new CustomZXingScannerView(context);
        }

    };
    List<BarcodeFormat> formats = new ArrayList<>();
    mListaPassageiros = new ArrayList<>();
    formats.add(BarcodeFormat.QR_CODE);
    setContentView(mScannerView);
    int currentapiVersion = android.os.Build.VERSION.SDK_INT;
    if (currentapiVersion >= android.os.Build.VERSION_CODES.M) {
        if (!checkPermission()) {
            requestPermission();
        } else {
            executarDepoisDaPermissao();
        }
    }
}
private boolean checkPermission() {
    return (ContextCompat.checkSelfPermission(getApplicationContext(), CAMERA) == PackageManager.PERMISSION_GRANTED
    && ContextCompat.checkSelfPermission(getApplicationContext(), ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
    && ContextCompat.checkSelfPermission(getApplicationContext(), …
Run Code Online (Sandbox Code Playgroud)

android android-camera android-permissions android-gps

9
推荐指数
2
解决办法
9091
查看次数

相机预览很好,但前置相机会产生非常暗的照片

我使用Camera 1 API构建了一个自定义相机,由于某种原因,它产生非常暗的图片(仅在前置摄像头,后置摄像头工作得非常好).相机预览以正确的亮度显示相机,只有在拍摄图像并将其解码为位图时,它才会显得暗.我疯狂地谷歌搜索了一段时间,发现这个问题报告了很多次,但找不到工作的解决方案.我正在使用的设备是三星J5.

CameraPreview:

class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {

  private static final String CAMERA = "CAMERA";

  private static Camera mCamera;

  private final CameraActivity cameraActivity;
  private final SurfaceHolder mHolder;

  public CameraPreview(Camera camera, CameraActivity cameraActivity) {
    super(cameraActivity);
    this.cameraActivity = cameraActivity;
    mCamera = camera;
    mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  }

  public void setCameraDisplayOrientation(int cameraId) {
    Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
    Camera.getCameraInfo(cameraId, info);
    final int rotation = cameraActivity.getWindowManager().getDefaultDisplay().getRotation();
    int degrees = 0;

    switch (rotation) {
      case Surface.ROTATION_0:
        degrees …
Run Code Online (Sandbox Code Playgroud)

java camera android android-hardware android-camera

9
推荐指数
1
解决办法
290
查看次数

Flutter CameraPreview 模糊、嘈杂且放大

我有一台 Google Pixel 3,正在使用 Flutter 的相机插件,版本为0.8.1

CameraPreview模糊、嘈杂、放大,而且通常看起来比 Android 的相机应用程序更糟糕。

安卓相机应用程序: 在此输入图像描述

颤动相机预览: 在此输入图像描述

这就是我实例化的方式CameraController

final cameras = await availableCameras();
final controller = CameraController(
  cameras[0],
  ResolutionPreset.veryHigh,
  enableAudio: false,
  imageFormatGroup: ImageFormatGroup.yuv420,
);
Run Code Online (Sandbox Code Playgroud)

我尝试了所有 4 个摄像头:

  • 摄像机 0 位于前面,并且是有问题的摄像机
  • 相机1-3在背面,它们都是一样的。它们的质量类似于 Android 的相机应用程序。

有人遇到这个问题吗?

camera android android-camera dart flutter

9
推荐指数
1
解决办法
1496
查看次数