Android调用系统的相机,图库,以及裁剪图片功能。

Android相机调用和自定义相机Demo源码 我的博客里面有博文详细讲解,并且关于android中图片加载的讲解也写得很详细,欢迎大家可以来看!多提意见 立即下载

在开发中,调用系统的相机拍照,或者图库选择图片是很常见的操作,有时候你会看到有的应用在选择图片的时候,会有个小方框,可以进行图片的裁剪选择,其实,这些都可以通过调用系统来实现。

1:调用系统的相机拍照。

        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
在onActivityResult中,可以通过data来得到bitmap。

//      Bundle extras = data.getExtras();
//      Bitmap imageBitmap = (Bitmap) extras.get("data");
这个bitmap是个缩略图,意义不大,我们肯定希望能拿到拍照的原图。这个时候,需要传递一个File的实例,也就是照片保存的路径。

 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            File photoFile = null;
            try {
                photoFile = createImageFile();
            } catch (IOException ex) {

            }
            if (photoFile != null) {
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                        Uri.fromFile(photoFile));
                startActivityForResult(takePictureIntent, requestCode);
            }
        }
private File createImageFile() throws IOException {
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        File storageDir = Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(
                imageFileName,  /* prefix */
                ".jpg",         /* suffix */
                storageDir      /* directory */
        );

        mCurrentPhotoPath = image.getAbsolutePath();
        Log.i(TAG,mCurrentPhotoPath);
        return image;
    }
其中,mCurrentPhotoPath就是拍照保存的路径,在onActivityResult中就可以获取图片,进行操作了。

2:调用系统的图库,选择图片。(在onActivityResult中通过URI来处理)

        Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, requestCode);
Uri photoUri = data.getData();
                    if (photoUri != null) {
                        String[] proj = { MediaStore.Images.Media.DATA };
                        Cursor actualimagecursor = managedQuery(photoUri, proj,
                                null, null, null);
                        try {
                            int index = actualimagecursor
                                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                            actualimagecursor.moveToFirst();
                            String img_path = actualimagecursor.getString(index);
                            mCurrentPhotoPath = img_path;
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }

3:调用系统的裁剪:

有的app在选择用户头像的时候,可以进行裁剪,其实系统本身就自带了,就是在拍照完或者选择完图库后,通过Intent了实现的。

public void zoomPhoto(){
        Intent intent = new Intent("com.android.camera.action.CROP");
        File f = new File(mCurrentPhotoPath);
        Uri contentUri = Uri.fromFile(f);
        intent.setDataAndType(contentUri, "image/*");

        // crop为true是设置在开启的intent中设置显示的view可以剪裁
        intent.putExtra("crop", "true");

        // 设置不能改变裁减大小框
        intent.putExtra("scale", true);
        // aspectX aspectY 是宽高的比例
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);

        // outputX,outputY 是剪裁图片的宽高
        intent.putExtra("outputX", 600);
        intent.putExtra("outputY", 600);

        // true:不返回uri,false:返回uri
        intent.putExtra("return-data", false);

        //保存裁剪的图片文件,在onActivityResult中返回的bitmap是个小的缩略图,三星测试的时候返回160*160的。
        //所有这里使用File保存,如知道原因或本人代码bug,请告知。谢谢。
        intent.putExtra("output", Uri.fromFile(tempFile));

        startActivityForResult(intent, REQUEST_CUT_PHOTO_SIZE);
    }

好了,通过上面的3段说明,已经可以在app中完成经常看到的需求了。

这个时候,你发现自己刚才拍的图片很不错,分享到朋友圈吧,让大家瞅瞅,然后打开微信,死活找不到这张图片,那是因为我们再onActivityResult中没有处理。在拍完照后,需要进行刷新。

    /**
     * 触发系统的Media Scanner,将我们的照片添加到Media Provider的数据库中,
     * 这样就可以使得Android相册程序与其他程序能够读取到这些照片
     */
    private void galleryAddPic() {
        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        File f = new File(mCurrentPhotoPath);
        Uri contentUri = Uri.fromFile(f);
        mediaScanIntent.setData(contentUri);
        this.sendBroadcast(mediaScanIntent);
    }


这样,整个流程就都已经完成了,下面是需要注意的几个地方。

1:图片需要进行缩放操作,避免OOM。

2:网上有的说,在图库选择图片的时候,可以直接传递缩放的intent参数,在三星note3上,可以正常使用,但是在mx4的测试中,却出现了问题,不能正常打开裁剪界面,最后还是还拍照一样处理,就OK了。

3:startActivityForResult中,requestCode不能小于0,如果小于0,是不会调用onActivityResult方法的。

4:不要忘记清单文件中权限的添加,对内存卡进行了操作。


最后,附上一个.java的代码,里面包含了上面的代码,没有整个工程。Android调用系统的相机,图库,以及裁剪图片功能。





我用两种方式玩转 MCP:CherryStudio vs VS Code 实测手记 MCP,全称,你可以理解为——给大模型装上“手脚”和“工具箱”。传统大模型像一位博学但手不能动的学者:“我知道怎么算圆周率,但没法打开计算器。而支持 MCP 的模型,能通过标准协议自动调用外部工具(比如fetch网络请求、readFile读文件、shell执行命令),真正做到“知行合一”。输入后**,保存,**之后就显示出来了MCP 不是“魔法”,而是把 AI 从“问答机”升级为“智能代理”的关键一步。工具本身不难,难的是“知道它能解决什么问题”。 阅读详情

相关推荐

STM32裸机开发基础:寄存器直接操作详解

寄存器是微控制器内部的特殊存储单元,直接与硬件电路连接,用于控制和监视硬件功能。与普通内存不同,寄存器的每一位(bit)通常都有特定的硬件含义。寄存器就是机器的控制面板上的各种开关和指示灯每个开关控制一个具体功能(如打开LED、启动通信)每个指示灯显示一个具体状态(如数据接收完成、错误发生)// GPIO引脚定义1。

2401_88760782的博客 2187

兼容android 11 唤起系统相机拍照并显示

兼容android 11 唤起系统相机拍照并显示 本文是记录兼容android 11的唤起系统相机拍照并正常显示,此处我默认已经获取到相机和读写的权限。 打开相机 /** * 保存 photoUri */ private Uri photoUri; /** * 打开相机 */ private void openCamera() { Intent takePictureIntent = new Intent(MediaStore.

u014714188的博客 9223

汽车零部件智能装配:C#+YOLOv8实现螺栓漏装检测与齿轮错位识别(附PLC通信与机械臂控制)

YOLOv8:小目标检测的最优解相比YOLOv7,YOLOv8的C2f特征融合网络对小目标(5-10mm螺栓)检测精度提升12%,且推理速度快8%;支持大输入尺寸(不显著增加耗时),可放大螺栓细节;官方提供yolov8n.pt(nano版),在边缘计算盒上能跑40+FPS,满足实时性。C#:工业软件的“兼容性核心”主流PLC(西门子S7-1200/1500)、机械臂(ABB、KUKA)的SDK多基于.NET开发,C#可直接调用,避免跨语言通信延迟;多线程管理成熟(Task。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1146

android使用相机 intent.resolveActivity returns null

android使用相机 intent.resolveActivity returns null

T_Y_F_的博客 1274

别再手动拆解字节了!用博图这个功能指令,5分钟搞定ARRAY转BOOL数组

本文详细介绍了西门子博图中`ARRAY_TO_BOOL`功能指令的高效应用,帮助工程师快速实现ARRAY到BOOL数组的转换。通过实战案例和参数配置指南,展示了如何5分钟内完成传统方法需半小时的任务,大幅提升PLC编程效率,特别适用于通信报文解析和设备状态监控。

weixin_42653691的博客 263

SAP数据导入工具(LSMW) 超级详细教程(批量导入内部订单)

用户提了个需求,让我批量导入内部订单几百个内部订单。我本打算用写段ABAP 代码来调用 BAPI (BAPI_INTERNALORDER_CREATE)就可以了。但想到我很久没有用过LSMW 了,都快要忘记了。于是我采用LSMW的方式,完成了任务。并把过程记录下来,形成教程方便我以后回头查看,分享出来也希望对大家有帮助。

IT小职员 2万+

Android 7.0 应用间共享文件FileProvider代码笔记

学习http://blog.csdn.net/lmj623565791/article/details/72859156Android7.0之前的拍照常规实现代码public void takePhoto() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (t...

u013359807的博客 1551

Python 爬虫实战:抓取应届生求职网校招岗位信息,助力学子就业

应届生求职网作为国内知名的招聘平台,汇聚了大量企业的校招岗位信息。了解这些岗位信息,对于应届毕业生制定求职策略、企业制定招聘计划以及相关就业市场分析等都具有重要意义。因此,本文将深入探讨如何运用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息,为应届毕业生提供有益的就业信息支持。本文深入探究了利用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息的全流程。从前期的环境搭建、模拟登录,到核心的数据抓取、存储,再到后续的数据分析与可视化,都详细展开讲解并提供代码支持。

u014481728的博客 1300

从0开始认识android(六):启动系统相机拍照、摄像的Intent

1、启动系统相机 1.1、只是简单的获取所拍照片的缩略图 启动相机 static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_...

jack_bear_csdn的博客 5051

适航文章汇总:知识体系全面梳理

无论您是行业新手还是经验丰富的专业人士,都可以通过本篇文章快速查找相关资料,提高对适航认证、机载系统、软件及硬件等领域的理解。本部分详细解析ARP 4754A、ARP 4761、DO-178C、DO-254等核心标准,并介绍其在机载系统开发中的应用。介绍FAA、EASA、CCAR等主要航空管理机构的适航规章体系,并说明各类飞行器(如固定翼、旋翼机、无人机等)的适航要求。本部分还探讨硬件设计、验证与确认过程中的挑战。从系统架构设计到机载设备的集成与管理,本部分介绍机载系统的研发体系及适航管理的最佳实践。

qq_41854911的博客 1451

OpenCV实战之人脸美颜美型(八)——大眼(下)

我们需要将上述描述量化表达,以r代表上述变形区域的圆的半径,X表示原始图像像素到变形圆圆心的距离,Y表示像素变形后的其距离变形圆圆心的距离,则其形状大致如下图所示。如下图所示,我们可以规定处理区域为眼睛为圆心的一个圆形,从圆心区域开始图像会放大,但该放大的比例随着距离圆心的距离而变小,直至边缘区域的放大比例为0。不过在实际图像变形操作中我们要从目标图像映射到原图,因此我们需要将X/Y调换,让X表示变形后图像的像素距离变形圆中心的距离,Y表示原图像素距离变形圆中心的距离,则其形状如下图所示。

On my way 901

调用隐式intent需要注意的地方。

开发中经常调用隐式的intent,比如使用相机应用程序进行拍照 下面的函数通过发送一个Intent来捕获照片: static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.A

阿寺的博客 924

AF自动对焦 CDAF PDAF

前言 主流的AF: CDAF, PDAF, laser assist AF(这个只是辅助,在微距或者拍摄纹理不明显的场景下好用)。 1.cdaf原理 CDAF的大致原理就是检测图像锐度或者等价于锐度的参数,不断推动马达寻找最清晰点实现合焦或者对焦。如下图: 缺点:对焦准确,速度慢,由于camera帧率,cpu处理速度,马达反映时间问题不能实时对焦运动物体。 2.pdaf原理 计算相位差,将相位差转换为相位差和af code的关系....

camerall 1万+

android 调用系统图库裁剪功能图片裁剪大小不一,Android调用系统相机、图库、裁剪图片并压缩上传(适配7.0)...

一、前言最近在开发中遇到了一个比较棘手的问题由于在之前使用的版本-targetSdkVersion小于24也就是小于7.0所以在使用相机拍照的时候不会出现问题,但是当targetSdkVersion版本大于或者等于7.0的时候用原来的方法调用相机就会抛出一个SecurityException安全异常通过搜索发现是出于对系统安全的考虑,在sdk24及以上,对相机的操作需要使用FileProvider...

weixin_39687814的博客 272

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android开发中调用系统的相机和图库及图片的后期处理

调用系统相机和图库,裁剪图片private static final int PHOTO_REQUEST_TAKEPHOTO = 1; 拍照 private static final int PHOTO_REQUEST_GALLERY = 2; 从相册中选择 private static final int PHOTO_REQUEST_CUT = 3; 结果 private File tempFil

开发技术总结专栏 484

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android调用系统图库并裁剪,Android调用系统图库和相机获取图片并裁剪

最近用到从系统图库和相机获取图片并裁剪当头像,根据郭霖大神的第一行代码调用相机和图册,来进行扩展和总结。1、获取权限2、点击按钮来提示选择图库还是相机private String[]mCustomItems=new String[]{"本地相册","相机拍照"};//显示选择相机,图库对话框private void showDialogCustom(){//创建对话框AlertDialog.Bui...

weixin_29124971的博客 520

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android拍照、调用系统图库、裁剪图片到指定大小后输出

在这两天开发过程中要实现一个更换封面的功能,图片可以从系统图库或者照相机拍照,虽然可以通过Intent意向传递简单获取系统功能,但是在处理图片的时候还是遇到了很多问题。 首先我们创建一个uri指向图片路径 Uri imageUri = Uri.parse(file:///sdcard/temp.jpg); 这个uri将在下面的图片存储方面起到关键作用 调用系统相机的action为Media

fanjunjian1991的专栏 3万+

Android设备上获取图片

从相机和图库获取图片并裁剪 由于数据装换时用到了外部存储,要添加外部数据读写的权限 调用启动相机: //调用系统图库 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);//新建一个内容选择界面的Intent intent.setType("image/*");//设置Inten

duduhali的专栏 473

android 图片 编辑图片,Android 选择图片 拍照 并编辑图片

调用系统图库并返回图片的url:Intent intentFromGallery = new Intent();intentFromGallery.setType("image/*"); // 设置文件类型intentFromGallery.setAction(Intent.ACTION_PICK);startActivityForResult(intentFromGallery, IMAGE_R...

weixin_34137872的博客 286

Android 图像系列: 图片的裁剪与相机调用

有时候我们需要的图片并不适合我们想要的大小, 那么我们就可以用到系统自带的图片裁剪功能, 把规定范围的图像给剪出来。     贴上部分代码:   //调用图库Intent intent = new Intent();intent.setType("image/*");intent.putExtra("crop", "true"); // crop=true 有这句才能出来最后的

曹浩洋的专栏 587

Android相机的基本使用与自定义相机

在项目中,经常会用到拍照获取图片以及从图库中选择图片,此篇文章就是自己的总结。

知识共享,你我皆是知识的搬运工 1455

借助系统自带图片裁剪集成图片选择以及7.0适配

一、前文   之前使用的图片裁剪功能一直是使用第三方的,也没时间去思考自己写一个的想法。后来无意间发现android自己本来就有裁剪功能,所以自己动手去集成了一把,并且把自己的权限封装以及7.0的适配都加进去 二、注意的几个点   其实也没有什么好说的,基本没有难度,只是有几个需要注意的点 1.一个是7.0的文件安全机制,7.0之后android对于文件的安全增加了保护,在部分地方使用Uri会产生...

weixin_33720452的博客 104

Android 从相机或相册获取图片并剪切

调用相机或相册: dialog.setOnUploadHeadClickListener(new UploadHeadDialog.OnUploadHeadClickListener() { @Override public void onCreamClick(View v) { // 调用相机 返回

u011125077的博客 439

Android借助系统自带图片裁剪集成图片选择以及7.0适配

一、前文  之前使用的图片裁剪功能一直是使用第三方的,也没时间去思考自己写一个的想法。后来无意间发现android自己本来就有裁剪功能,所以自己动手去集成了一把,并且把自己的权限封装以及7.0的适配都加进去二、注意的几个点  其实也没有什么好说的,基本没有难度,只是有几个需要注意的点 1.一个是7.0的文件安全机制,7.0之后android对于文件的安全增加了保护,在部分地方使用Uri会产生Fil

qq_24859309的博客 1612

相机相册

package com.example.lianxi; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Environment; import android.provider.MediaStore; import android.s...

zxc2358的博客 190

Android裁剪图片最简单方法(调用系统的)

很多网友平时如果需要在Android平台下开发处理图片裁剪的应用,如果感觉实现的逻辑比较麻烦,比如说需要写类此Win32下的橡皮筋类CRectTracker来设置裁剪区域,这里Android开发网给大家一个最简单可靠的方法,通过下面的Intent调用系统的Camera程序的裁剪功

159
上一篇: 创建,删除文件或文件夹及判断其是否存在
下一篇: 自定义控件实现微博图片九宫格效果
arplay
博客等级 码龄12年 0粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值