1,得到保存截图文件的地址

private static final String IMAGE_FILE_LOCATION = Environment.getExternalStorageDirectory()+"/temp.jpg";

private Uri imageUri;

imageUri = Uri.fromFile(new File(IMAGE_FILE_LOCATION));

2。相冊和拍照button的点击事件

                // 相冊
imageViewLocalPhoto.setOnClickListener(new OnClickListener() { public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,//content://media/external/images/media
IMAGE_UNSPECIFIED);
startActivityForResult(intent, PHOTOZOOM);
}
}); // 拍照
imageViewTakePhoto.setOnClickListener(new OnClickListener() { public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
Environment.getExternalStorageDirectory(), "temp.jpg")));
System.out.println("============="
+ Environment.getExternalStorageDirectory());
startActivityForResult(intent, PHOTOHRAPH);
}
});

3。在onActivityResult回调方法中

拍照和本地图片传入的uri不同

 // 拍照 显示图片页面
if (requestCode == PHOTOHRAPH) { startPhotoZoom(imageUri);
} // 读取相冊缩放图片 显示图片页面
if (requestCode == PHOTOZOOM) { startPhotoZoom(data.getData());
}

4,截图方法

public void startPhotoZoom(Uri uri, int flag) {

			Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//图像输出
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true);
intent.putExtra("return-data", false);//回调方法data.getExtras().getParcelable("data")返回数据为空
startActivityForResult(intent, PHOTORESOULT); }

5,回调方法返回截图结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { // 处理结果 处理缩放过后的图片
if (requestCode == PHOTORESOULT) {
flag_layout = "layout2";
Bundle extras = data.getExtras();
if (extras != null) {
photo = extras.getParcelable("data");
}
if(photo==null)//载入本地截图
{
Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/temp.jpg");
imageView.setImageBitmap(bm);
}
else//载入接收的图片数据
{
imageView.setImageBitmap(photo);
} } super.onActivityResult(requestCode, resultCode, data);
}

传统的截图方法为:1,不加这句intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//图像输出,,

2,这句改为返回数据为true:intent.putExtra("return-data", true);

3。也就没有剪切后的输出图片,通过data.getExtras().getParcelable("data")接收返回的图像数据

说明:经试验,传统的截图方法常常死机,报绑定数据过大的错误,所以改用本例的方法比較好用了,就是截好图片后,直接载入本地图片就好了

bug:假设删除temp.jpg文件后。拍照截图时会一直截删掉的temp.jpg文件。本地图片没问题,再换回拍照截图也没问题了

android项目中的拍照和本地图片截图的更多相关文章

  1. 在Android项目中启用Java 8的部分特性--Lambda & Method References

    Android N发布时同时发布了一个新的编译工具Jack(AS2.1+支持),基于Jack我们可以使用Java 8 的部分特性,在低版本机器上能使用的更少,同时Jack也有诸多不完善,工具链的改变难 ...

  2. 拍照、本地图片工具类(兼容至Android7.0)

    拍照.本地图片工具类:解决了4.4以上剪裁会提示"找不到文件"和6.0动态授予权限,及7.0报FileUriExposedException异常问题. package com.hb ...

  3. Android 项目中文件夹的说明与作用(转)

    (转自:http://blog.csdn.net/goodshot/article/details/11529731) Android 项目中文件夹的作用 1. src:存放所有的*.java源程序. ...

  4. 对Android项目中的文件夹进行解释

    对Android项目中的文件夹进行解释: · src:里面存放的是Activity程序,或者是以后的其他组件,在此文件夹之中建立类的时候一定要注意,包名称不能是一级. · gen:此文件夹中的内容是自 ...

  5. Android项目中如何用好构建神器Gradle?(转)

    最近在忙团队并行开发的事情,主要是将各个团队的代码分库,一方面可以降低耦合,为后面模块插件化做铺垫,另一方面采用二进制编译,可以加快编译速度.分库遇到了一些问题,很多都要通过Gradle脚本解决,所以 ...

  6. Android项目中JNI技术生成并调用.so动态库实现详解

    生成 jni方式有两种:一种是通过SWIG从C++代码生成过度的java代码:另一种是通过javah的方式从java代码自动生成过度的C++代码.两种方式下的步骤流程正好相反. 第一种方式:由于需要配 ...

  7. android项目中配置NDK自动编译生成so文件

    1 下载ndk开发包   2 在android 项目中配置编译器(以HelloJni项目为例)  2.1 创建builer  (a)Project->Properties->Builder ...

  8. android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件

    简介 XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换. 将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件. 1.下载工具 xstr ...

  9. android项目中如何加载已有so库 <转>

    1,在项目根目录下建立文件夹libs/armeabi文件夹 2,将so库放入 libs/armeabi文件夹 注意事项: 1,如果采用静态注册的方式请注意C文件中严格按照命名规则 Java_packa ...

随机推荐

  1. java读取url中json文件中的json数据

    有时候需要远程从其他接口中获取json数据,如果遇到返回的json数据是一个文件而不直接是数据,那么可以通过以下方法进行读取: /** * 从数据接口获取到数据 * @return * @throws ...

  2. 进程间通信(java)--队列

    前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便 ...

  3. quartusii 使用ModelSim do文件实现仿真(Verilog)

    QuartusII从9.1之后的版本都已经取消了内部自带的仿真器,都需要借助第三方仿真软件比如Modelsim才能实现仿真.一般在进行代码编写的时候,如果结合功能仿真,可以很快的验证代码实现的逻辑是否 ...

  4. asp.net用三层实现多条件检索

    众所周知,三层将项目分为界面层,业务逻辑层和数据訪问层(以最主要的三层为例) 相同都知道,多条件检索事实上就是依据用户选择的条件项,然后来拼sql语句 那么.既然要依据用户选择的条件项来拼sql语句, ...

  5. SourceInsight-Symbol not found

    使用SourceInsight查看源代码时,发现点击查看相关类型时,无法关联到其代码,出现 symbol not found, 然而明明在我的头文件有定义的 网上查了一下主要是因为新建工程导入文件后, ...

  6. markdown 语法简要备忘

    标题 # 一级标题 ## 二级标题 ### 三级标题 无序列表 前面加 - 或 * 即可变为 有序列表 直接用数字即可 1. 2. 3. 添加引用 > 图片与链接 插入链接与插入图片的语法很像, ...

  7. C++ 11 nullptr关键字

    熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作.如果暂时不明确该指针指向哪个变量,则需要赋予NULL值.除了NUL ...

  8. 八、Java的可变参数例子

    1.在Java中什么是可变参数 可变参数是在Java1.5中引入的特性.它准许一个方法 public static void main(String[] args) { print("a&q ...

  9. CEdit 控制键盘操作

    写在前面的话:在工作中要实现这样一个功能,在一个树形控件中选择要发送消息的客户,添加到一个列表控件中,点击确定跳到一个信息发送页面如下图,在发送人编辑框中显示选择的客户,要实现的就是即允许用户删除用户 ...

  10. 在Eclipse中给JRE-Library添加本地Javadoc

    Eclipse中的JRE-Library的Javadoc默认是一个URL,指向oracle的一个web-page,那你在离线的时候就无法使用了,为了解决这个问题,你可以从oracle下载JDK-Spe ...