我最近注意到不推荐使用Camera API,我找到了名为Camera2的新API.
我已阅读文档,但我并不理解.
所以我的问题是:如何使用新的相机api预览前置摄像头?
只是一个预览,而不是录制.
我想使用这个新API,因为将来我猜测当前的Camera API将被替换并停止工作.
所以我想做好准备,坐下来观看,每个人都会恐慌.XD
我将CameraX的分析器用例与 MLKit 的BarcodeScanner. 我想先裁剪从相机接收到的图像的一部分,然后再将其传递到扫描仪。
我现在正在做的是将ImageProxy(我在分析器中收到的)转换为Bitmap,裁剪它,然后将其传递给BarcodeScanner. 缺点是这不是一个非常快速和有效的过程。
我还注意到运行此代码时 Logcat 中收到的警告:
ML Kit 检测到您似乎将相机帧作为位图对象传递给检测器。这是低效的。请对camera2 API使用YUV_420_888格式,对(旧)相机API使用NV21格式,并将字节数组直接传递给ML Kit。
不进行转换固然很好ImageProxy,但是如何裁剪我想要分析的矩形呢?
我已经尝试过设置(imageProxy.image.cropRect) 类cropRect的字段Image,但它似乎并不影响最终结果。
android android-image android-camera2 android-camerax google-mlkit
在我的自定义相机找到焦点后,我试图锁定焦点.首先它将AF模式设置为自动:
builder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_AUTO);
Run Code Online (Sandbox Code Playgroud)
触摸预览后,它会找到焦距,我必须使用以下代码锁定AF和AE:
builder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
builder.set(CaptureRequest.CONTROL_AE_LOCK, true);
Run Code Online (Sandbox Code Playgroud)
锁定AE在任何设备中都能正常工作.锁定AF适用于Nexus5和Nexus 5x.但至于三星S5和S6,它一直试图寻找焦点.
锁定焦点的最佳方法是什么?
我正在构建一个类似于社交媒体的应用程序,人们可以在这里分享Instagram等照片和视频.这就是为什么Camera对我的应用非常重要.现在camera2 API让我很困惑.我想在API级别11+上运行我的应用程序.我知道camera2仅适用于API级别21+因此,我需要为旧版本设计两个API(摄像头),为更高版本设计第二个(摄像头2).问题是我刚刚开始学习Android,我不知道这两个API之间的主要区别是什么.
Camera2 API有哪些主要功能?
或Old Camera API有任何缺点吗?
我的应用程序中需要三件事.
1-简单拍摄照片2-连拍图像(创建GIF图像)3-简单视频拍摄.
哪种Camera API对我有好处?
我一直在使用谷歌的camera2 api演示,不幸的是,示例应用程序是为了在屏幕高度的大约70%处显示纹理视图预览,在环顾四周之后,我能够确定这是由AutoFitTextureView覆盖了onMeasure()方法如下图所示:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
if (0 == mRatioWidth || 0 == mRatioHeight) {
setMeasuredDimension(width, height);
} else {
if (width < height * mRatioWidth / mRatioHeight) {
setMeasuredDimension(width, width * mRatioHeight / mRatioWidth);
} else {
setMeasuredDimension(height * mRatioWidth / mRatioHeight, height);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试通过设置正确的高度和宽度来纠正这个setMeasuredDimension(width, height);问题,这解决了高度问题,并从纹理视图中给我一个全屏预览,但是在每个设备上宽高比完全被破坏和翘曲,标准的固定方式是什么这个?我看到很多应用程序在Play商店找到了解决这个问题的方法,但还没能找到解决方案,任何帮助都会有很长的路要走,谢谢.
java android android-camera android-textureview android-camera2
目前我正在尝试将Camera2.Face转换为实际视图的rect,以便在Camera2 API检测到的脸部上绘制圆圈.
我可以通过以下代码获取面数及其数据到Callback中:
private CameraCaptureSession.CaptureCallback mCaptureCallback
= new CameraCaptureSession.CaptureCallback() {
private void process(CaptureResult result) {
Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE);
Face [] faces = result.get(CaptureResult.STATISTICS_FACES);
if(faces != null && mode != null)
Log.e("tag", "faces : " + faces.length + " , mode : " + mode );
}
@Override
public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request, CaptureResult partialResult) {
process(partialResult);
}
@Override
public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) {
process(result);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试使用下面的代码将Face rect转换为实际的视图坐标(似乎它不起作用):
/**
* Callback from the CameraCaptureSession.CaptureCallback …Run Code Online (Sandbox Code Playgroud) 我的问题很简单:
如何以
android.hardware.Camera21:1的比例获得Android 而不像Instagram那样变形?
我测试了GoogeSamples项目android-Camera2Basic.但是当我以1:1的比例更改预览时,图像会变形.有没有人对此有所了解?
我试图找出相机拍摄的照片的色温.
final CameraCaptureSession.CaptureCallback previewSSession = new CameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureStarted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, long timestamp, long frameNumber) {
super.onCaptureStarted(session, request, timestamp, frameNumber);
}
@Override
public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, TotalCaptureResult result) {
super.onCaptureCompleted(session, request, result);
RggbChannelVector rggbChannelVector = result.get(CaptureResult.COLOR_CORRECTION_GAINS);
getColorTemperature(rggbChannelVector);
startCamera();
}
};
private void getColorTemperature(RggbChannelVector rggbChannelVector) {
//rggbChannelVector.getRed() = 2.192929
//rggbChannelVector.getGreenEven() = 1.0
//rggbChannelVector.getGreenOdd() = 1.0
//rggbChannelVector.getBlue() = 1.832323
}
Run Code Online (Sandbox Code Playgroud)
iOS似乎有一个随时可用的方法来执行temperatureAndTintValues
在搜索类似的东西时(用Java或我可以采用的任何其他语言),几乎所有这些方法都期望RGB值具有[0, 255]范围.
将XYZ转换为CCT(相关色温)的方法很少,但即使要使XYZ值正确,我也需要RGB值. [0, 255]
正如你可以看到从数值COLOR_CORRECTION_GAINS是 …