调用摄像机
目标: 调用摄像机,并将结果显示在界面上
步骤:
1.声明一个图片资源路径
private Uri imageUri;
2.在layout.xml中创建一个ImageView,用来显示图片,并在AndroidManifest.xml中申请sdcard权限,用于保存拍摄的照片
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3.在onCreate()中创建一个图片文件,并获取路径
imageView=(ImageView)findViewById(R.id.imageView); imageUri=Uri.fromFile(new File(getExternalCacheDir(),"test.jpg"));
4.在按钮的点击事件中,启动摄像机,并保存拍摄结果
Intent intent=new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); startActivityForResult(intent,1);
5.在onActivityResult回调方法中,将照片显示出来
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); try { //将.jpg解析成bitmap对象 Bitmap bitmap=BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); imageView.setImageBitmap(bitmap); } catch (FileNotFoundException e) { e.printStackTrace(); } }
调用相册
1.因为图片在sdcard中,所以要申请权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.在主线程中启动相册
Intent intent = new Intent("android.intent.action.GET_CONTENT"); intent.setType("image/*"); startActivityForResult(intent, 1); // 打开相册
3.如果要在相册选择图片,并显示在ImageView上
在4.4以下系统,使用以下代码
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); handleImageBeforeKitKat(data); } private void handleImageBeforeKitKat(Intent data) { Uri uri = data.getData(); String imagePath = getImagePath(uri, null); displayImage(imagePath); } private String getImagePath(Uri uri, String selection) { String path = null; // 通过Uri和selection来获取真实的图片路径 Cursor cursor = getContentResolver().query(uri, null, selection, null, null); if (cursor != null) { if (cursor.moveToFirst()) { path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); } cursor.close(); } return path; } private void displayImage(String imagePath) { if (imagePath != null) { Bitmap bitmap = BitmapFactory.decodeFile(imagePath); picture.setImageBitmap(bitmap); } else { Toast.makeText(this, "failed to get image", Toast.LENGTH_SHORT).show(); } }
在4.4以上系统,使用以下代码
private void handleImageOnKitKat(Intent data) { String imagePath = null; Uri uri = data.getData(); if (DocumentsContract.isDocumentUri(this, uri)) { // 如果是document类型的Uri,则通过document id处理 String docId = DocumentsContract.getDocumentId(uri); if("com.android.providers.media.documents".equals(uri.getAuthority())) { String id = docId.split(":")[1]; // 解析出数字格式的id String selection = MediaStore.Images.Media._ID + "=" + id; imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection); } else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) { Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId)); imagePath = getImagePath(contentUri, null); } } else if ("content".equalsIgnoreCase(uri.getScheme())) { // 如果是content类型的Uri,则使用普通方式处理 imagePath = getImagePath(uri, null); } else if ("file".equalsIgnoreCase(uri.getScheme())) { // 如果是file类型的Uri,直接获取图片路径即可 imagePath = uri.getPath(); } displayImage(imagePath); // 根据图片路径显示图片 } private String getImagePath(Uri uri, String selection) { String path = null; // 通过Uri和selection来获取真实的图片路径 Cursor cursor = getContentResolver().query(uri, null, selection, null, null); if (cursor != null) { if (cursor.moveToFirst()) { path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); } cursor.close(); } return path; } private void displayImage(String imagePath) { if (imagePath != null) { Bitmap bitmap = BitmapFactory.decodeFile(imagePath); picture.setImageBitmap(bitmap); } else { Toast.makeText(this, "failed to get image", Toast.LENGTH_SHORT).show(); } }
相关推荐
移动端浏览器和手机APP,h5页面调用相机、相册、录像、录音,可以选择本地相册;以及文件的读取和加载方法, 调用FileReader对象的方法
"Unity摄像机和相册插件"就是针对这一需求设计的解决方案。 该插件主要适用于Unity5.0及以上版本,这意味着它已经过时,因为当前Unity的稳定版本已经更新到2021.x系列。尽管如此,对于仍在使用较旧Unity版本的...
android 调用系统相机相册兼容7.0
以上就是如何在Unity3D 2018.3.0中调用iOS相册并剪裁图片的基本步骤和关键知识点。在实际开发过程中,可能还需要根据具体需求对代码进行调整和优化,确保功能的稳定性和性能。记住,始终要遵循苹果的App Store审核...
通过以上步骤,你就可以在Qt应用中实现调用原生安卓照相机的功能,包括拍照、摄像、打开相册以及播放视频。这种方式既保留了Qt的跨平台特性,又充分利用了Android系统的原生能力,提高了用户体验。在实际开发中,你...
最新版,Unity调用Android/IOS系统相册、摄像机,选取后可以裁剪(Demo)
iPhone 调用相机或者打开相册获取图片 本篇文章主要讲解了在 iPhone 中如何调用相机或者打开相册获取图片,并可以设置压缩比。通过本文,你将了解到如何使用 UIImagePickerController 获取图片,并进行裁剪处理。 ...
在Android平台上开发应用程序时,Qt框架提供了一个强大的跨平台解决方案,允许开发者使用相同的代码库在多个...通过合理的代码设计和充分的测试,开发者可以构建出高效且稳定的摄像录音功能,适用于多种Android设备。
拍照或者从相册中选择图片后,我们都可以直接或间接的得到Uri或源文件。 通过`imageView.setImageUri(uri)`不会引发图片方向不正确的问题。 但是通过`BitmapFactory.decodeFile();`将源文件解析成Bitmap后再...
在Android应用开发中,调用系统相册和拍照是常见的功能需求,允许用户选择或拍摄图片以便在应用中使用。本篇文章将详细讲解如何在Android中实现这两个功能,并提供一个完整的、无bug的Demo示例。 首先,让我们讨论...
基于google Zxing实现二维码的生成,识别和长按识别的效果,仿微信选择相册里的二维码图片直接识别的效果 ,选择相册在主页面点击打开摄像机进行扫描,进入扫描页面,在里面有选择相册的选项,直接点击就可以调用相册
在Android应用开发中,调用摄像头和相册是常见的功能,允许用户拍摄照片或选取已有的图片。以下是如何实现这个功能的详细步骤: 首先,我们需要在`activity_main.xml`布局文件中添加两个按钮,分别用于启动相机和...
在iOS开发中,集成拍照和摄像功能是常见的需求,用户可以通过这些功能拍摄照片或录制视频,然后将其保存到设备的相册中。本教程将详细讲解如何实现这一过程,主要涉及的知识点包括: 1. **AVFoundation框架**:在...
本文将详细讲解如何在Unity中调用iOS和Android原生接口,以便实现打开图库和相机功能,并获取用户选择的图片。 首先,我们需要了解Unity的插件机制。Unity允许开发者编写C#代码,同时可以通过`#if`预处理器指令来...
这包括理解坐标系统、光照、纹理映射、摄像机视角控制等基础知识。 3. **图像处理**:为了让2D图片呈现出3D效果,可能需要进行图像变换,如透视校正、立体合成、阴影生成等。这些处理可能涉及OpenCV或其他图像处理...
通过创建一个AndroidJavaObject或AndroidJavaClass,我们可以调用Android SDK中的Camera API和ImageIO类来实现拍照和图片读取功能。 1. **拍照** 在Unity中拍照通常分为以下几个步骤: - 创建一个...
同样,通过Intent可以调用系统摄像功能,ACTION_VIDEO_CAPTURE对应的是录像功能。代码类似拍照: ```java Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); if (takeVideoIntent....
uniAPP自己封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启,定位权限,摄像头权限,读写相机权限,麦克风权限,拨打电话权限
UIImagePickerController是iOS平台上用于集成到应用中的一个核心组件,它允许用户通过拍照或从相册选择图片和视频。这个组件是苹果提供的UI框架的一部分,特别设计用于处理媒体输入,特别是对于那些需要用户交互来...
android 项目源码下载:17套摄影图像类项目,详情如下: Android 3D相册图片滑动+倾斜+放大+倒影处理源码.rar Android Google官网的图片缓存源码.rar ...调用系统相册和系统照相机功能雨实例源码.rar