Android实现从相册截图的功能

在这篇文章中,我将向大家展示如何从相册截图。
先看看效果图:

上一篇文章中,我就拍照截图这一需求进行了详细的分析,试图让大家了解Android本身的限制,以及我们应当采取的实现方案。大家可以回顾一下:Android实现拍照截图功能

根据我们的分析与总结,图片的来源有拍照和相册,而可采取的操作有

  • 使用Bitmap并返回数据
  • 使用Uri不返回数据

前面我们了解到,使用Bitmap有可能会导致图片过大,而不能返回实际大小的图片,我将采用大图Uri,小图Bitmap的数据存储方式。

我们将要使用到URI来保存拍照后的图片:

private

static
final
String IMAGE_FILE_LOCATION = "file:///sdcard/temp.jpg";//temp
 file

Uri
 imageUri = Uri.parse(IMAGE_FILE_LOCATION);//The
 Uri to store the big bitmap

不难知道,我们从相册选取图片的Action为Intent.ACTION_GET_CONTENT。

根据我们上一篇博客的分析,我准备好了两个实例的Intent。

一、从相册截大图:

Intent
 intent = new

Intent(Intent.ACTION_GET_CONTENT, null);

intent.setType("image/*");

intent.putExtra("crop",
"true");

intent.putExtra("aspectX",
2);

intent.putExtra("aspectY",
1);

intent.putExtra("outputX",
600);

intent.putExtra("outputY",
300);

intent.putExtra("scale",
true);

intent.putExtra("return-data",
false);

intent.putExtra(MediaStore.EXTRA_OUTPUT,
 imageUri);

intent.putExtra("outputFormat",
 Bitmap.CompressFormat.JPEG.toString());

intent.putExtra("noFaceDetection",
true);
//
 no face detection

startActivityForResult(intent,
 CHOOSE_BIG_PICTURE);

二、从相册截小图

Intent
 intent = new

Intent(Intent.ACTION_GET_CONTENT, null);

intent.setType("image/*");

intent.putExtra("crop",
"true");

intent.putExtra("aspectX",
2);

intent.putExtra("aspectY",
1);

intent.putExtra("outputX",
200);

intent.putExtra("outputY",
100);

intent.putExtra("scale",
true);

intent.putExtra("return-data",
true);

intent.putExtra("outputFormat",
 Bitmap.CompressFormat.JPEG.toString());

intent.putExtra("noFaceDetection",
true);
//
 no face detection

startActivityForResult(intent,
 CHOOSE_SMALL_PICTURE);

三、对应的onActivityResult可以这样处理返回的数据

switch

(requestCode) {

case

CHOOSE_BIG_PICTURE:

  Log.d(TAG,
"CHOOSE_BIG_PICTURE:
 data = "
+ data);//it
 seems to be null

  if(imageUri
 != null){

    Bitmap
 bitmap = decodeUriAsBitmap(imageUri);//decode
 bitmap

    imageView.setImageBitmap(bitmap);

  }

  break;

case

CHOOSE_SMALL_PICTURE:

  if(data
 != null){

    Bitmap
 bitmap = data.getParcelableExtra("data");

    imageView.setImageBitmap(bitmap);

  }else{

    Log.e(TAG,
"CHOOSE_SMALL_PICTURE:
 data = "
+ data);

  }

  break;

default:

  break;

}

private

Bitmap decodeUriAsBitmap(Uri uri){

  Bitmap
 bitmap = null;

  try

{

    bitmap
 = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));

  }
catch

(FileNotFoundException e) {

    e.printStackTrace();

    return

null;

  }

  return

bitmap;

}

以上就是Android实现拍照截图功能的方法,希望对大家的学习有所帮助。

(0)

相关推荐

  • Android实现截图和分享功能的代码

    先给大家展示下效果图吧 直接上代码: xml的布局: <Button android:id="@+id/btn_jp" android:layout_marginTop="10dip" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:tex

  • Android模拟器中窗口截图存成文件实现思路及代码

    Android模拟器内容是用OpenGL渲染的,所以用一般的编程截图(如PrintWindow()等)会是黑屏.这是因为画的东西放在framebuffer里. 一种方法是通过adb把guest的framebuffer数据/dev/graphics/fb0倒到host,再转为图片.但这样速度比较慢. 好在Android模拟器中把guest的framebuffer传到host进行显示,所以在host端只要将framebuffer输出到文件即可. 首先定义每次framebuffer更新时的回调函数:

  • Android实现拍照截图功能

    本文将向大家展示如何拍照截图. 先看看效果图: 拍照截图有点儿特殊,要知道,现在的Android智能手机的摄像头都是几百万的像素,拍出来的图片都是非常大的.因此,我们不能像对待相册截图一样使用Bitmap小图,无论大图小图都统一使用Uri进行操作. 一.首先准备好需要使用到的Uri: private static final String IMAGE_FILE_LOCATION = "file:///sdcard/temp.jpg";//temp file Uri imageUri =

  • Android中通过view方式获取当前Activity的屏幕截图实现方法

    此方法是通过view的方式获取当前activity的屏幕截图,并不是framebuffer的方式,所以有一定的局限性.但是这种方法相对简单,容易理解. 首先通过下面的函数获取Bitmap格式的屏幕截图: 复制代码 代码如下: public Bitmap myShot(Activity activity) { // 获取windows中最顶层的view View view = activity.getWindow().getDecorView(); view.buildDrawingCache()

  • Android中如何获取视频文件的截图、缩略图

    背景 公司最近要求给我负责的APP加上视频录制和发布的功能,我简单的完成了基本的录制和视频压缩功能,后来发现发布接口需要上传视频的截图,网上搜索了一下资料,在这里整理一下. 代码实现 /** * 获取视频文件截图 * * @param path 视频文件的路径 * @return Bitmap 返回获取的Bitmap */ public static Bitmap getVideoThumb(String path) { MediaMetadataRetriever media = new Me

  • Android获取常用辅助方法(获取屏幕高度、宽度、密度、通知栏高度、截图)

    我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现.下面就分享一下Android中常用的一些辅助方法: 获取屏幕高度: /** * 获得屏幕高度 * @param context * @return * by Hankkin at:2015-10-07 21:15:59 */ public static int getScreenWidth(Context context) { WindowManager wm = (WindowManager) cont

  • 详解有关Android截图与录屏功能的学习

    简单的截屏和录屏功能. 因为MediaProjection是5.0以上才出现的,所以今天所讲述功能实现,只在5.0以上的系统有效. 截屏: 步骤如下: 1:获取MediaProjectionManager 2:通过MediaProjectionManager.createScreenCaptureIntent()获取Intent 3:通过startActivityForResult传入Intent然后在onActivityResult中通过MediaProjectionManager.getMe

  • Android实现从相册截图的功能

    在这篇文章中,我将向大家展示如何从相册截图. 先看看效果图: 上一篇文章中,我就拍照截图这一需求进行了详细的分析,试图让大家了解Android本身的限制,以及我们应当采取的实现方案.大家可以回顾一下:Android实现拍照截图功能 根据我们的分析与总结,图片的来源有拍照和相册,而可采取的操作有 使用Bitmap并返回数据 使用Uri不返回数据 前面我们了解到,使用Bitmap有可能会导致图片过大,而不能返回实际大小的图片,我将采用大图Uri,小图Bitmap的数据存储方式. 我们将要使用到URI

  • Android实现从相册选择照片功能

    本文实例为大家分享了Android实现从相册选择照片功能的具体代码,供大家参考,具体内容如下 之前在 <Android开发之裁剪照片>一文中介绍过,如何从相册选取照片和拍摄照片并进行裁切,在本篇中主要向介绍从相册选择原生照片(不裁切). 第一步:向系统发送选择照片的意图. /**  * 从相册选择原生的照片(不裁切)  */ private void selectFromGallery() {     // TODO Auto-generatedmethod stub     Intentin

  • Android使用WebView实现截图分享功能

    在APP项目的开发过程中,经常会用到分享图片的功能,有时候还需要根据当前用户信息获取指定的分享图片,比如要求在用户分享图中显示用户名.Uid.用户头像等信息.想到的实现方法主要有两点: 1.通过android SDK自带的Canvas方法进行绘制. 2.通过webView实现客户端与H5交互,然后将H5界面做截图处理. 本文主要介绍第二种方式的实现过程,第一种方式的实现方法,后续有时间会在博客中做说明,下面开始本文内容. 首先确定我们要实现的逻辑: 1.客户端与H5的交互,客户端将用户信息(用户

  • Android实现长图文截图功能实例代码

    前言 截图是我们日常开发经常会遇到的一个功能,最近工作遇到的需求又升级了,需要实现长图文的截图功能,经常查找相关资料终于实现了,支持截取微博.知乎.今日头条等第三方APP...... 先瞅瞅效果图: 效果图 再瞅瞅最终的长截图: 我是长截图一,瞅瞅嘛... 我是长截图二,再瞅一下嘛... 上一周脑子突然冒出长截图这个功能,想着如何截取如微博,知乎,头条等这些第三方APP的界面呢?出于好奇心,花了一周业余时间,撸一个看看. 不就是截屏+拼图,还能有什么难度么?这个...好像确实是. Questio

  • Android自定义实现图片加文字功能

    Android自定义实现图片加文字功能 分四步来写: 1,组合控件的xml; 2,自定义组合控件的属性; 3,自定义继承组合布局的class类,实现带两参数的构造器; 4,在xml中展示组合控件. 具体实现过程: 一.组合控件的xml 我接触的有两种方式,一种是普通的Activity的xml:一种是父节点为merge的xml.我项目中用的是第一种,但个人感觉第二种好,因为第一种多了相对或者绝对布局层. 我写的 custom_pictext.xml <?xml version="1.0&qu

  • Android开发实现各种图形绘制功能示例

    本文实例讲述了Android开发实现各种图形绘制功能.分享给大家供大家参考,具体如下: 这里结合本人的开发事例,简单介绍一下如何在Android平台下实现各种图形的绘制. 首先自定义一个View类,这个view类里面需要一个Paint对象来控制图形的属性,需要一个Path对象来记录图形绘制的路径,需要一个Canvas类来执行绘图操作,还需要一个Bitmap类来盛放绘画的结果. Paint mPaint = new Paint(); mPaint.setAntiAlias(true); mPain

  • Android 仿QQ头像自定义截取功能

    看了Android版QQ的自定义头像功能,决定自己实现,随便熟悉下android绘制和图片处理这一块的知识. 先看看效果: 思路分析: 这个效果可以用两个View来完成,上层View是一个遮盖物,绘制半透明的颜色,中间挖了一个圆:下层的View用来显示图片,具备移动和缩放的功能,并且能截取某区域内的图片. 涉及到的知识点: 1.Matrix,图片的移动和缩放 2.Paint的setXfermode方法 3.图片放大移动后,截取一部分 编码实现: 自定义三个View: 1.下层View:ClipP

  • Android集成zxing扫码框架功能

    我们知道zxing是一个强大的处理二维码和条形码等的开源库,本篇文章记录一下自己在项目中集成zxing开源库的过程. 导入依赖 implementation 'com.google.zxing:core:3.3.3' 申请权限 在AndroidManifest中申请相应权限: <!--相机--> <uses-permission android:name="android.permission.CAMERA" /> <!--震动--> <use

  • Android 调用系统相册选择照片

    前言 在相册里选择图片上传也是很常见的功能了例如微信朋友圈等等.但是他们是自定义的选择器,可以选择多张图片并修改.这里我们讲一个最简单的:调用系统的相册选择一张图片并展示.另外有的读者还想到要通过相机拍照来选择图片的功能,也可以参考一下我的另一篇文章Android使用系统相机进行拍照 使用步骤 这里我是通过一个简单的demo来讲解怎么去实现这个功能.首先看布局: <Button android:id="@+id/button2" android:layout_width=&quo

  • Android 破解视频App去除广告功能详解及解决办法总结

    Android 破解视频App去除广告功能 作为一个屌丝程序猿也有追剧的时候,但是当打开视频app的时候,那些超长的广告已经让我这个屌丝无法忍受了,作为一个程序猿看视频还要出现广告那就是打我脸,但是我有没有钱买会员,只能靠着毕生技能去耍耍去除广告了.下面就来介绍一下如何进行视频广告的去除. 一.视频广告播放原理 首先我们需要了解的一个基本知识点那就是广告其实也是一段视频,那么他肯定有请求地址和播放地址.那么我们的思路就来了,如果能够得到这些地址的话,我们就可以去除广告了,为什么呢?因为我们知道所

随机推荐