zoukankan      html  css  js  c++  java
  • 如何使用Android MediaStore裁剪大图片

    译者按:在外企工作的半年多中花了不少时间在国外的网站上搜寻资料,其中有一些相当有含金量的文章,我会陆陆续续翻译成中文,与大家共享之。初次翻译,“信达雅”三境界恐怕只到信的层次,望大家见谅!

    这篇文章相当经典而实用,想当初我做手机拍照截图的时候,大多都是在网上抄来抄去的内容,从来没有人考虑过实际项目中的需求。实际上,拍照传大图片,如果用普通方式会耗用极大的内存,Android一个App原则上的16M内存限制可以一下子被耗光。Android在拍照上有一个隐藏的设计,如果拍照图片过大,只返回一张缩略图。具体到不同手机,都是不一样的。

    -------------------------------------------------------------------------------------

    译文:

    概述

    我写这篇文章是为了发表我对MediaStore裁剪图片功能的一些简要研究。基本上,如果你要写一个应用程序,使用已有的Media Gallery并允许用户在你的应用里选取TA的图片的一部分(可选功能:人脸识别)。 可以使用一个Intent做到这个,但是也存在着相应的问题,总的来说也缺少这方面的文档告诉我们怎么实现它。 另外,这篇文章基于2.1并且在Nexus One上做了测试。 Nexus One上的实现似乎被这群人写在了这里: Media Gellery for Nexus One 。

    反馈

    这篇文章需要使用基于我的研究所写的程序。如果你对我推荐的实现方案有所改进,请让我知道。我会相应的更新这篇文章。

    Intent细节

    首先,让我们探讨下Intent以及它的特点。在看了一些代码示例以后,我发现我可以很轻松的使用如下的Intent调用裁剪功能:

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
    intent.setType(“image/*”);
    intent.putExtra(“crop”, “true”);

    然而,这是在我缺少附加的文档,不知道这些选项的具体含义等等情况之下的选择。所以,我将我的yanj整理成一个表格 ,并写了一个演示程序,力图演示控制此功能的所有可供选项。

    你可以在你的程序中使用使用我的代码,并且扩展它。我会将之附加在这篇文章上。

    Exta Options Table for image/* crop:

    附加选项 数据类型 描述
    crop String 发送裁剪信号
    aspectX int X方向上的比例
    aspectY int Y方向上的比例
    outputX int 裁剪区的宽
    outputY int 裁剪区的高
    scale boolean 是否保留比例
    return-data boolean 是否将数据保留在Bitmap中返回
    data Parcelable 相应的Bitmap数据
    circleCrop String 圆形裁剪区域?
    MediaStore.EXTRA_OUTPUT ("output") URI 将URI指向相应的file:///...,详见代码示例

    现在,最令人困惑的是MediaStore.EXTRA_OUTPUT以及return-data选项。

    你主要有两种方式从这个Intent中取得返回的bitmap:获取内部数据或者提供一个Uri以便程序可以将数据写入。

  • 相关阅读:
    448. Find All Numbers Disappeared in an Array
    447. Number of Boomerangs
    441. Arranging Coins
    438. Find All Anagrams in a String
    437. Path Sum III
    434. Number of Segments in a String
    422. Valid Word Square
    415. Add Strings
    414. Third Maximum Number
    [codility]Array-closest-ascenders
  • 原文地址:https://www.cnblogs.com/androidxiaoyang/p/3771854.html
Copyright © 2011-2022 走看看