- 浏览: 186083 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
Allen_J_Will:
...
python学习,第四天笔记 -
大头K:
qindongliang1922 写道你用的啥IDE工具楼主
...
python学习,第三天笔记 -
qindongliang1922:
你用的啥IDE工具楼主
python学习,第三天笔记 -
大头K:
hksfho 写道你好,怎樣顯不坐標?你说的是在地图上显示坐标 ...
基于百度地图实现的实时定位功能(含项目代码) -
hksfho:
你好,怎樣顯不坐標?
基于百度地图实现的实时定位功能(含项目代码)
调用手机相机实现拍照、剪裁图片、并保存图片到手机
先看效果图:
直接上代码:
github源码地址:
https://github.com/kk-java/CameraDemo
先看效果图:
直接上代码:
package com.liucanwen.camerademotest; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; /** * 拍照demo * 功能:拍照、剪裁、保存到手机上 * @author ck * @since 2014年3月20日 16:04:57 */ public class MainActivity extends Activity implements OnClickListener { private ImageView headIv; // 设置头像 private static final int IMAGE_REQUEST_CODE = 0; // 请求码 本地图片 private static final int CAMERA_REQUEST_CODE = 1; // 拍照 private static final int RESULT_REQUEST_CODE = 2; // 裁剪 private static final String SAVE_AVATORNAME = "head.png";// 保存的图片名 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); headIv = (ImageView) findViewById(R.id.image_layout); headIv.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.image_layout: showOptionsDialog(); break; default: break; } } // 选择图片来源 private void showOptionsDialog() { String[] items = new String[] { "拍照", "选择本地图片" }; DialogInterface.OnClickListener click = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case 0://拍照 Intent intentFromCapture = new Intent( MediaStore.ACTION_IMAGE_CAPTURE); intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, Uri .fromFile(new File(Environment .getExternalStorageDirectory(), SAVE_AVATORNAME))); startActivityForResult(intentFromCapture, CAMERA_REQUEST_CODE); break; case 1://选择本地图片 Intent intentFromGallery = new Intent(); intentFromGallery.setType("image/*"); // 设置文件类型 intentFromGallery.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intentFromGallery, IMAGE_REQUEST_CODE); break; } } }; new AlertDialog.Builder(this).setItems(items, click).show(); } /** * 回调结果处理 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_CANCELED) { switch (requestCode) { case IMAGE_REQUEST_CODE: startPhotoZoom(data.getData()); break; case CAMERA_REQUEST_CODE: startPhotoZoom(Uri.fromFile(new File(Environment .getExternalStorageDirectory(), SAVE_AVATORNAME))); break; case RESULT_REQUEST_CODE: if (data != null) { getImageToView(data); } break; } } super.onActivityResult(requestCode, resultCode, data); } /** * 裁剪图片方法实现 */ public void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // 设置裁剪 intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 300); intent.putExtra("outputY", 300); intent.putExtra("return-data", true); startActivityForResult(intent, RESULT_REQUEST_CODE); } /** * 保存裁剪之后的图片数据 */ private void getImageToView(Intent data) { Bundle extras = data.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); saveMyBitmap(photo); // 保存裁剪后的图片到SD headIv.setImageBitmap(photo); } } /** * 将头像保存在SDcard */ public void saveMyBitmap(Bitmap bitmap) { File f = new File(Environment.getExternalStorageDirectory(), SAVE_AVATORNAME); try { f.createNewFile(); FileOutputStream fOut = new FileOutputStream(f); bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut); fOut.flush(); fOut.close(); } catch (IOException e) { e.printStackTrace(); } } }
github源码地址:
https://github.com/kk-java/CameraDemo
发表评论
-
android studio 编译问题
2015-08-12 17:58 7191、今天在用AS直接调试安装应用的时候,发现安装的debug应 ... -
BASE64加密解密
2014-08-19 17:59 0import java.io.ByteArrayOutputS ... -
在EditText和TextView显示表情图片(类似QQ表情)
2014-08-04 13:25 1642通过重写EditText和TextView,在EditText ... -
java修改目录所有文件名
2014-07-15 13:03 1878前言: 一直遇到一个问题,android在打包的时候,有时会涉 ... -
webview清除cookie
2014-07-14 15:54 4202前言: 由于项目需要,webview需要与app进行交互,其实 ... -
按正方形裁切图片和图片加边框
2014-06-07 09:13 19071.按正方形裁切图片: /** * 按正方形裁切图片 ... -
解决部分android手机照片被系统自动旋转
2014-05-21 14:13 1799使用某星手机有为应用的图库添加图片时,发现照片已被旋转,APP ... -
关于拍完照或者保存图片,无法在相册上显示问题
2014-05-05 17:43 932场景:拍完照或者保存图片到SDCard时,无法马上在相册上显示 ... -
Universal-Image-Loader 内存占用
2014-04-30 23:24 1537前言:之前项目一直使用Universal-Image-Load ... -
Fragment already added 解决方法
2014-04-22 11:22 13180最近项目上遇到一个问题: 找了很久,尼玛终于找到方法解决 ... -
非官方调用新浪微博
2014-04-18 09:19 1908很多情况,我们都需要用户关注我们的官方微博,现在提供两种办法展 ... -
类似上下滚动切换广告牌效果实现
2014-04-18 06:39 0看到需求时,上下滚动切换,第一反应就是VerticalView ... -
关于刷新自定义View
2014-04-18 06:34 815因为项目需要,需要在自定义View可见之后再动态变化宽度。 ... -
保存网络图片到手机上
2014-04-16 12:00 950// 保存图片到手机端 public static bool ... -
ListView快速定位第一行
2014-04-15 16:23 1037if (Build.VERSION.SDK_INT < ... -
FragmentTabHost切换Fragment时避免UI重新加载
2014-03-12 14:27 4526用FragmentTabHost + Fragment 可以实 ... -
Gridview 去掉橙色点击响应效果
2014-03-12 11:19 942一行代码搞定: gridView.setSelector(ne ... -
如何在service里面弹出对话框
2014-03-10 00:03 3202先给一个需求:需要在service里面监听短信的接收,如果接收 ... -
ViewFlipper 3D旋转动画实现 界面切换
2014-03-08 00:46 1704先来看看效果: 简单介绍一下,两个界面,以水平中线旋转18 ... -
代码混淆时注意事项,防止注解被删掉
2014-03-06 07:58 4182昨天在混淆代码生成apk时,一直无法正常打开,看错误log,发 ...
相关推荐
这是github的项目源码地址。Android Studio2.3.3调用系统的Camera实现拍照功能,并将照片保存到本地内存卡中
Swift版的GitHub源码主要指的是使用Swift编程语言实现的GitHub客户端应用的源代码。相比于Objective-C(OC)版本,Swift的语法更加简洁明了,使得开发过程更为高效。以下将详细探讨Swift语言在构建GitHub客户端时所...
这款应用的源码是公开的,对于Android开发者而言,它是一个宝贵的资源,可以学习到GitHub客户端应用的实现细节,提升自己的Android开发技能。 1. **GitHub API的使用**: - GitHub App 使用GitHub的V3 REST API 和...
php码云+GitHub图床源码,依托码云和github,搭建一个免费的,受自己控制的图床。 既稳定,也不用担心对方跑路。可能目录模式对大图不友好,所以采用贴图+图片链接模式。 仅支持单文件,大小限制2MB,本站图床存储...
在标题中提到的“SpringFramework3.2 源码 github源码gradle编译”,意味着我们可以从GitHub获取到Spring Framework 3.2的源代码,并使用构建工具Gradle来编译和管理项目依赖。Gradle是一种强大的构建自动化工具,它...
微信小程序-github 微信小程序的一个练手项目以及作为一个github重度使用者,使用[github api](https://developer.github.com/v3/)结合微信小程序来开发.使用方法 没有小程序的内测资格,自然也就无法上传,只能...
"Spark github源码 例子很有价值"这个标题表明,通过分析这些源码,我们可以学习到Spark如何实现其核心功能,如弹性分布式数据集(RDD)、DataFrame、Dataset以及Spark SQL等。 描述中提到"github无法下载的可以直接...
- 在iOS原生代码中,实现UnitySendMessage方法,接收到Unity的调用后启动UIImagePickerController,处理用户的选择和剪裁操作。完成后,通过UnitySendMessage将处理好的图片数据传回Unity。 - 图片数据通常是Base...
微信小程序demo:github博客(源代码+截图)微信小程序demo:github博客(源代码+截图)微信小程序demo:github博客(源代码+截图)微信小程序demo:github博客(源代码+截图)微信小程序demo:github博客(源代码+截图)微信...
此外,你还可以通过查看生命周期钩子函数了解组件从创建到销毁的过程,学习如何使用Vue Router实现路由导航,以及如何使用axios等库进行API调用。同时,这些源码可能包含了一些实战项目,让你有机会将理论知识应用到...
一款Windows环境下非常简洁美观易用的命令行工具——cmd替代者,它支持了大部分的Linux命令。支持ssh连接linux,使用起来非常方便。比起cmd、powershell、conEmu,其界面美观简洁,功能强大。
在GitHub上,Vue的源码是公开的,这为开发者提供了一个深入了解框架工作原理、学习最佳实践以及贡献代码的机会。 源码学习通常涉及以下几个方面: 1. **设计模式**:Vue.js 使用了多种设计模式,如发布-订阅者模式...
《GitHub Copilot 源码解析与应用探索》 GitHub Copilot 是一款革命性的代码辅助工具,由 GitHub 和 OpenAI 合作开发。它利用强大的机器学习算法,为程序员提供智能代码补全功能,极大地提高了编码效率。在本文中,...
github源码下载速度慢,脚本使用了国内镜像下载路径,执行权限即可,全部源码会自动高速下载到grpc目录中。
全景自动拼接是一种将多张图像融合...总之,"全景自动拼接源码Github资源" 提供了一个实际操作的平台,让你能够动手实现全景图像的自动拼接,不仅加深了对OpenCV库的理解,还能提升在图像处理和计算机视觉领域的技能。
Github的第三方客户端源码,这是一个代码托管网站Github的移动客户端,基于Github 官方API开发,实现了查看动态,查看项目详情,查看代码,star项目,follow用户,搜索项目,搜索用户,查看Trending等主要功能。
标题中的“s7netplus-0.9.0github源码读写测试0811.rar”表明这是一个关于s7netplus项目的源码版本,版本号为0.9.0,且该源码可能来自于GitHub,同时进行了读写测试,日期可能是2022年8月11日。这个项目很可能涉及到...
volley是一个优秀的安卓开源网络访问工具 这里包含一个volley代码jar和源码,版本是2015.03.03的1.0.11版本 更多资料可以参见volley的github地址: https://github.com/mcxiaoke/android-volley
GitHub上最火的40个Android开源项目源码,筛选了下,主要是把可以加到我们项目中的下了下来,这里有40个项目的描述,以及12个项目的源码,省的各位童鞋重复下载了,当然如果有童鞋需要其他的项目,我这里也给出了...
TengineKit.Image类封装了一系列工具API,帮助开发者快速方便的处理图片相关的功能,具体功能请查阅文档,这里我们将用这个TengineKit.Image里面的API实现Android前置摄像头视频流转为Bitmap(YUV_NV21转RGBA)。