标签: android-camera

哪个视图是 Android 相机预览的最佳选择?

我们知道,我们可以选择TextureViewSurfaceViewGLSurfaceView来进行Android相机预览。

哪一款是相机预览的最佳选择?我关注的是相机的性能。

performance android preview android-camera android-textureview

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

从 NDK 获取 SurfaceTexture 的 GL 上下文

目的: 我用于SurfaceTexture显示相机预览,并且需要通过从 NDK 获取 GL 上下文在表面上进行绘制。我选择这种SurfaceTexture方法是因为我可以避免相机帧缓冲区从 java 手动传递到 NDK,以节省一些性能。

public class MainActivity extends Activity implements SurfaceTextureListener {

private Camera mCamera;
private TextureView mTextureView;

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

    mTextureView = new TextureView(this);
    mTextureView.setSurfaceTextureListener(this);

    setContentView(mTextureView);
}

@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
    mCamera = Camera.open();
    Camera.Size previewSize = mCamera.getParameters().getPreviewSize();
    mTextureView.setLayoutParams(new FrameLayout.LayoutParams(previewSize.width, previewSize.height, Gravity.CENTER));

    try {
        mCamera.setPreviewTexture(surface);
    } catch (IOException t) {
    }

    mCamera.startPreview();
}

@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, …
Run Code Online (Sandbox Code Playgroud)

android opengl-es android-camera opengl-es-2.0

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

Android前置摄像头图像保存颠倒

我正在构建一个使用相机功能的 Android 应用程序。我遇到的问题是从前置摄像头获取的图像数据 (byte[]) 在我的三星 s7 和 Nexus 手机上颠倒过来。它在预览中显示正确,但在我按原样保存数据然后在图库中显示图像后,它们全部颠倒了。我知道我可以在保存之前翻转图像数据,但我已经在运行 4.4 (kitkat) 的 blu C 5.0 HD 上测试了代码,并且该手机上的图像数据以正确的方式定向。所以翻转图像总是会导致其他设备上的错误。有人告诉我,这个问题是因为在生产新的三星和 Nexus 手机时,前置摄像头是倒置的,以节省空间。我不确定这是否正确,但如果是这样,如果我翻转所有图像,它会弄乱具有正确相机方向的手机。那么有没有办法在保存图像之前检测图像数据的方向呢?

这是我正在使用的代码:

mCamera.takePicture(null, null, mPicture);
Run Code Online (Sandbox Code Playgroud)

打回来:

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

        processCameraCallback(data);
    }
};
Run Code Online (Sandbox Code Playgroud)

处理数据:

    public void processCameraCallback(byte[] data) {
    confirmPhoto(true);
    //Make a new empty picture file
    try {
        pictureFile = Utils.createImageFile();
    } catch (IOException ex) {
        // Error occurred while creating the File
        Log.e(TAG, "Failed to create photo file: " …
Run Code Online (Sandbox Code Playgroud)

camera android orientation android-camera

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

Android Camera2 手动闪光并不总是有效

我在 Android 6.1、sdk 23 上使用新的camera2 api。

我有两个请求:预览和静态图像捕获请求。我想让闪光灯在每次静止图像请求时关闭,但没有任何预闪光。现在,我的请求如下所示:

CaptureRequest.Builder requester = mCameraDevice.createCaptureRequest(mCameraDevice.TEMPLATE_STILL_CAPTURE);
        requester.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
        requester.set(CaptureRequest.CONTROL_CAPTURE_INTENT, CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE);
        requester.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED);
        requester.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL);
        requester.addTarget(mCaptureBuffer.getSurface());

mCaptureSession.capture(requester.build(), null, null);
Run Code Online (Sandbox Code Playgroud)

它似乎适用于一部手机(摩托罗拉 Moto G),但不适用于另一部手机(Nexus 5 - 闪光灯根本无法打开)。我知道 Nexus 的闪光灯可以工作,因为我可以用其他相机应用程序触发它,所以我猜有一些默认值我没有设置。

还有另一种方法可以做到这一点/我可以设置更多标志吗?

谢谢!

编辑:


事实证明,我遇到的很多麻烦都源于使用仅LIMITED支持camera2的设备。仅仅因为您可以使用相机 2 访问相机并不意味着您可以控制所有功能。查看答案以了解更多信息

android android-camera android-camera2

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

VideoCapturer 切换摄像头

我正在使用 webrtc 示例代码从 Android 设备流式传输到网页。示例代码不具备切换摄像头的功能。我试图解决它,但失败了。该示例使用 VideoCapturerAndroid 类,我发现切换相机使用不同类型的所有建议。

示例的主要部分如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_video_chat);
    ButterKnife.bind(this);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    Bundle extras = getIntent().getExtras();

    if (extras == null || !extras.containsKey(Constants.USER_NAME)) {
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        Toast.makeText(this, "Need to pass username to VideoChatActivity in intent extras (Constants.USER_NAME).", Toast.LENGTH_SHORT).show();
        finish();
        return;
    }
    this.username = extras.getString(Constants.USER_NAME, "");
    this.mCallStatus = (TextView) findViewById(R.id.call_status);

    // First, we initiate the PeerConnectionFactory with our application context and some options.
    PeerConnectionFactory.initializeAndroidGlobals(
            this,  // Context
            true,  // Audio Enabled …
Run Code Online (Sandbox Code Playgroud)

java android video-capture android-camera webrtc

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

安卓相机X | 颜色检测

我正在 Android 上使用新的 CameraX。

我做了一个基本的应用程序(类似于“入门”),其中有相机预览和亮度分析仪。每一秒我都会在 TextView 中显示我的亮度。

现在,按照 CameraX 指南,我想进行颜色检测。大约每隔一秒,我就希望获得屏幕中心像素的颜色。

事实上,我不知道如何按照与亮度分析仪相同的结构进行颜色检测。

光度分析仪类别:

class LuminosityAnalyzer : ImageAnalysis.Analyzer {

private var lastTimeStamp = 0L
private val TAG = this.javaClass.simpleName
var luma = BehaviorSubject.create<Double>()

override fun analyze(image: ImageProxy, rotationDegrees: Int) {
    val currentTimeStamp = System.currentTimeMillis()
    val intervalInSeconds = TimeUnit.SECONDS.toMillis(1)
    val deltaTime = currentTimeStamp - lastTimeStamp
    if(deltaTime >= intervalInSeconds) {
        val buffer = image.planes[0].buffer
        val data = buffer.toByteArray()
        val pixels = data.map { it.toInt() and 0xFF }
        luma.onNext(pixels.average())
        lastTimeStamp = currentTimeStamp
        Log.d(TAG, "Average luminosity: …
Run Code Online (Sandbox Code Playgroud)

android android-camera kotlin color-detection android-camerax

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

在 Android 应用程序中拍照并将其保存到图库中

我正在开发一个 Android 应用程序,有时我必须拍照并将其保存到图库中。相机打开并拍摄照片,但不会将其保存到图库中。这是我的代码:

public class CameraActivity extends AppCompatActivity {

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_camara);
        dispatchTakePictureIntent();
    }

    static final int REQUEST_IMAGE_CAPTURE = 1;

    @RequiresApi(api = Build.VERSION_CODES.M)
    private void dispatchTakePictureIntent() {


        if (checkSelfPermission(Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.CAMERA},
                    MY_CAMERA_REQUEST_CODE);
        }
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
    }


    private static final int MY_CAMERA_REQUEST_CODE = 100;


    @Override

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults); …
Run Code Online (Sandbox Code Playgroud)

java android android-camera

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

如何在 PreviewView 准备好时获取 CameraX 事件

我正在尝试通过动画实现效果,但只有在预览视图处于活动状态后才能实现。原因之一也是为了避免相机绑定后出现闪烁。

我已经设法使用反射 (androidx.camera.core.UseCase) 来做到这一点,但在某些设备上 onUseCaseActive 以奇怪的顺序被多次调用。它首先处于 ACTIVE 状态,然后切换到 INACTIVE,并被多次调用,最后进入 ACTIVE 状态。

所以我的实际问题是:有什么方法可以获取 CameraX 回调,以便我可以根据相机的状态以不同的方式管理我的状态?

android android-camera android-camerax

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

没有相机权限无法打开相机“0”

我的清单中有以下内容

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />
Run Code Online (Sandbox Code Playgroud)

但是我收到这个错误

An error occurred while connecting to camera 0: Status(-8, EX_SERVICE_SPECIFIC): '1: validateClientPermissionsLocked:1165: Caller ... (PID 10153, UID 6049) cannot open camera "0" without camera permission'
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用此代码让相机正常工作

public static Camera getCameraInstance(){
    Camera c = null;
    try {
        c = Camera.open();
    } catch (Exception e) {
        Log.e("getCameraInstance", "exception", e);
    }
    return c; // returns null if camera is unavailable
}
Run Code Online (Sandbox Code Playgroud)

如何让这款相机正常工作?

java android-camera android-permissions

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

Flutter:“camera_android”抛出错误:绑定尚未初始化

回归。升级插件后,我的应用程序不再启动。

\n

这是我的颤振规格:

\n

Flutter 已经在稳定频道上更新到最新版本

\n

Flutter 3.0.2 \xe2\x80\xa2 通道稳定 \xe2\x80\xa2 https://github.com/flutter/flutter.git

\n

框架 \xe2\x80\xa2 修订版 cd41fdd (10 天前) \xe2\x80\xa2 2022-06-08 09:52:13 -0700

\n

引擎 \xe2\x80\xa2 修订版 f15f824b57\n工具 \xe2\x80\xa2 Dart 2.17.3 \xe2\x80\xa2 DevTools 2.12.2

\n

以前一切正常,但我收到此错误:

\n
I/flutter ( 6677): `camera_android` threw an error: Binding has not yet been initialized.\nI/flutter ( 6677): The "instance" getter on the ServicesBinding binding mixin is only available once that binding has been initialized.\nI/flutter ( 6677): Typically, this is done by calling "WidgetsFlutterBinding.ensureInitialized()" or …
Run Code Online (Sandbox Code Playgroud)

binding camera android-camera flutter

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