android camera2预览方向,Android camera2预览无法在横向模式下正常工作
我只想在textureView中显示相机预览.
在纵向模式下它看起来很好但在横向模式下它顺时针旋转90度.
我知道这样的事情可以解决这个问题:
private static final SparseIntArray ORIENTATIONS = new SparseIntArray();
static {
ORIENTATIONS.append(Surface.ROTATION_0, 90);
ORIENTATIONS.append(Surface.ROTATION_90, 0);
ORIENTATIONS.append(Surface.ROTATION_180, 270);
ORIENTATIONS.append(Surface.ROTATION_270, 180);
}
我不知道在哪里打电话.你有什么建议吗?
这是我的代码:
private TextureView textureView;
private static final String TAG = "AndroidCameraApi";
private String cameraId;
protected CameraDevice cameraDevice;
protected CameraCaptureSession cameraCaptureSessions;
protected CaptureRequest captureRequest;
private static final int REQUEST_CAMERA_PERMISSION = 200;
private Size imageDimension;
protected CaptureRequest.Builder captureRequestBuilder;
private Handler mBackgroundHandler;
private HandlerThread mBackgroundThread;
private ImageReader imageReader;
private static final SparseIntArray ORIENTATIONS = new SparseIntArray();
static {
ORIENTATIONS.append(Surface.ROTATION_0, 90);
ORIENTATIONS.append(Surface.ROTATION_90, 0);
ORIENTATIONS.append(Surface.ROTATION_180, 270);
ORIENTATIONS.append(Surface.ROTATION_270, 180);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo);
textureView = (TextureView) findViewById(R.id.texturePhoto);
assert textureView != null;
textureView.setSurfaceTextureListener(textureListener);
}
TextureView.SurfaceTextureListener textureListener = new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
//open your camera here
openCamera();
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
// Transform you image captured size according to the surface width and height
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
};
private void openCamera() {
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
Log.e(TAG, "is camera open");
try {
cameraId = manager.getCameraIdList()[0];
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
assert map != null;
imageDimension = map.getOutputSizes(SurfaceTexture.class)[0];
// Add permission for camera and let user grant the permission
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(PhotoActivty.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CAMERA_PERMISSION);
return;
}
manager.openCamera(cameraId, stateCallback, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
Log.e(TAG, "openCamera X");
}
private final CameraDevice.StateCallback stateCallback = new CameraDevice.StateCallback() {
@Override
public void onOpened(CameraDevice camera) {
//This is called when the camera is open
Log.e(TAG, "onOpened");
cameraDevice = camera;
createCameraPreview();
}
@Override
public void onDisconnected(CameraDevice camera) {
cameraDevice.close();
}
@Override
public void onError(CameraDevice camera, int error) {
cameraDevice.close();
cameraDevice = null;
}
};
protected void createCameraPreview() {
try {
SurfaceTexture texture = textureView.getSurfaceTexture();
assert texture != null;
texture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight());
Surface surface = new Surface(texture);
captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
captureRequestBuilder.addTarget(surface);
cameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback(){
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
//The camera is already closed
if (null == cameraDevice) {
return;
}
// When the session is ready, we start displaying the preview.
cameraCaptureSessions = cameraCaptureSession;
updatePreview();
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
Toast.makeText(PhotoActivty.this, "Configuration change", Toast.LENGTH_SHORT).show();
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
protected void updatePreview() {
if(null == cameraDevice) {
Log.e(TAG, "updatePreview error, return");
}
captureRequestBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
try {
cameraCaptureSessions.setRepeatingRequest(captureRequestBuilder.build(), null, mBackgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
private void closeCamera() {
if (null != cameraDevice) {
cameraDevice.close();
cameraDevice = null;
}
if (null != imageReader) {
imageReader.close();
imageReader = null;
}
}
android camera2预览方向,Android camera2预览无法在横向模式下正常工作相关推荐
- android camera2预览方向,Android Camera2预览偶尔会旋转90度(示例代码)
我正在使用Android的Camera2 API开发一些应用程序.到目前为止,我已经能够在TextureView中显示预览.该应用程序默认为横向模式.使用模拟器时,预览将显示为颠倒.在我的物理Nexu ...
- android百度地图标方向,Android百度地图之方向感应和模式更改
本文实例为大家分享了Android百度地图之方向感应和模式更改,供大家参考,具体内容如下 目标效果: 菜单中设置几种模式,点击可查看不同的地图形式,这里随便截几张图. 1.首先要去百度地图网站 htt ...
- android拍照保存照片方向,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...
android.jpg 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照.人脸检测等功能 文章传送门: 接下来的几篇文章中,我将给大家介绍如何使用Camera2实 ...
- android传感器获取运动方向,Android开发者指南-运动传感器Motion Sensor[原创译文]...
Android 平台支持很多监测设备运动的传感器.其中有两个传感器一定是基于硬件的(加速度计和陀螺仪),有三个可能基于硬件或软件(重力计.线性加速计和旋转向量传感器). 比如,某些设备的软传感器利用加 ...
- android拍照保存照片方向,android 拍照的照片方向问题,读取图片EXIF信息
Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的.实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈.快门.白平衡.ISO.焦距.日期时间等各种和拍摄条件 ...
- android 获取屏幕旋转方向,android获取手机屏幕尺寸和旋转方向
布局文件main.xml: android:layout_width="fill_parent" android:layout_height="fill_parent&q ...
- android paint设置字体方向,Android paint的drawText() 的正确使用方式
本帖最后由 文晶 于 2016-8-31 12:35 编辑 前段时间在做打印测试,一般打印都是发送字膜,但是非常麻烦,需要去计算字膜,然后又封装成打印机需要的格式,总之,两个字:麻烦!后来在我苦苦计算 ...
- Android获取view焦点方向,android 中获取当前焦点所在屏幕中的位置 view.getLocationOnScreen(location)...
final int[] location = new int[2]; view.getLocationOnScreen(location); final int[] location = new in ...
- android 阿拉伯语文字方向,android – 如何将RTL文本(阿拉伯语)绘制到位图并正确排序?...
我正在尝试将阿拉伯文字绘制到位图上以供显示: Bitmap img = Bitmap.createBitmap( (int) f+100, 300, Config.RGB_565); Canvas c ...
最新文章
- 面试官:说一下线程池内部工作原理?
- saltstack中salt-key收集的主机名与实际主机名不一致
- 流言终结者——C语言内存管理
- C++学习之路 | PTA乙级—— 1050 螺旋矩阵 (25 分)(精简)
- mysql查字段的备注_Mysql 查看表注释或字段注释
- 数据库异常---ORA-01436: 用户数据中的 CONNECT BY loop in user data 循环
- 如何查看IIS的80端口被占用?
- 硬盘安装android
- 已知地球上某两个点的坐标(即经纬度),求两点的实际距离。uniapp实现(实现语法js)
- Linux下载离线安装包
- latex模板中 引入ORCID链接的方法
- python 等值面_ANSYS Fluent快速添加等值面/等值线 源代码-教育代码类资源
- python的ols_看懂python3 之statsmodels包的OLS
- execl筛选去重_excel表格如何去除重复数据进行筛选
- 陀螺年度巨献 | 2020年度区块链产业发展报告
- [论文阅读] (15)英文SCI论文审稿意见及应对策略学习笔记总结(letpub爬虫)
- WordCount程序详解
- 大一上学期学习生活情况总结
- html5 获取页面的宽和高
- 达梦DM7_dmdbchk使用