博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于解决 从相册中选择照片后无法剪切图片以及无法加载图片的问题
阅读量:6085 次
发布时间:2019-06-20

本文共 4891 字,大约阅读时间需要 16 分钟。

程序分析:

主要分两个部分

    (1)先拍照,然后剪切,最后显示出来。    (2)从相册中选择一张照片进行剪切然后显示出来

代码参照《第一行代码》,书中的代码运行时(2)出现了问题,无法剪切图片且无法加载图片

MainActivity.java代码如下:

1 package com.example.lynn.choosepictest;  2   3 import android.content.Intent;  4 import android.graphics.Bitmap;  5 import android.graphics.BitmapFactory;  6 import android.net.Uri;  7 import android.os.Environment;  8 import android.provider.MediaStore;  9 import android.support.v7.app.AppCompatActivity; 10 import android.os.Bundle; 11 import android.util.Log; 12 import android.view.View; 13 import android.widget.Button; 14 import android.widget.ImageView; 15  16 import java.io.File; 17 import java.io.FileNotFoundException; 18  19 public class MainActivity extends AppCompatActivity { 20  21     public static final int TAKE_PHOTO = 1; 22     public static final int CROP_PHOTO = 2; 23     private Button takePic; 24     private Button chooseBtn; 25     private ImageView picture; 26     private Uri imageUri; 27  28     @Override 29     protected void onCreate(Bundle savedInstanceState) { 30         super.onCreate(savedInstanceState); 31         setContentView(R.layout.activity_main); 32         takePic = (Button) findViewById(R.id.take_pic); 33         chooseBtn = (Button) findViewById(R.id.choose_from_album); 34  35         chooseBtn.setOnClickListener(new View.OnClickListener() { 36             @Override 37             public void onClick(View v) { 38                 File outputImage = new File(Environment.getExternalStorageDirectory() 39                         , "output_Image.jpg"); 40                 try { 41                     if (outputImage.exists()) { 42                         outputImage.delete(); 43                     } 44                     outputImage.createNewFile(); 45                 } catch (Exception e) { 46                     e.printStackTrace(); 47                 } 48  49                 imageUri = Uri.fromFile(outputImage); 50                 Intent intent = new Intent("android.intent.action.PICK"); 51                 intent.setType("image/*"); 52                 intent.putExtra("crop", true); 53                 intent.putExtra("scale", true); 54                // intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); 55                              //   书中的这个代码没有运行,说明选中图片imageUri没有传过去,或者说就是空的! 56                 startActivityForResult(intent, TAKE_PHOTO);//参数传TAKE_PHOTO 57             } 58         }); 59  60         takePic.setOnClickListener(new View.OnClickListener() { 61             @Override 62             public void onClick(View v) { 63  64                 File outputImage = new File(Environment.getExternalStorageDirectory(), "tempImage.jpg"); 65                 try { 66                     if (outputImage.exists()) { 67                         outputImage.delete(); 68                     } 69                     outputImage.createNewFile(); 70                 } catch (Exception e) { 71                     e.printStackTrace(); 72                 } 73                 imageUri = Uri.fromFile(outputImage); 74                 Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 75                 intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 76                 startActivityForResult(intent, TAKE_PHOTO);//启动相机程序 77  78             } 79         }); 80     } 81  82     @Override 83     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 84  85         switch (requestCode) { 86             //裁剪工作 87             case TAKE_PHOTO: 88                89                 if (resultCode == RESULT_OK) { 90                     if(data != null) { 91                         imageUri = data.getData();  //此句是关键  在选中图片后imageUri并没有取到值,所以在这取值 92                    }       93                     Log.e("TAG","TAKE_PHOTO"); 94                     Intent intent1 = new Intent("com.android.camera.action.CROP"); 95                     intent1.setDataAndType(imageUri, "image/*"); 96                     intent1.putExtra("scale", true); 97                     intent1.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 98                     startActivityForResult(intent1, CROP_PHOTO); 99                 }100                 break;101 102             103             //显示图片104             case CROP_PHOTO:105                 if (resultCode == RESULT_OK) {106                     try {107                         Bitmap bitmap = BitmapFactory.decodeStream(108                                 getContentResolver()109                                         .openInputStream(imageUri));110                         picture.setImageBitmap(bitmap);111                     } catch (FileNotFoundException e) {112                         e.printStackTrace();113                     }114                 }115                 break;116             default:117                 break;118         }119     }120 }
View Code

 

转载于:https://www.cnblogs.com/Lynn0814/p/5329432.html

你可能感兴趣的文章
网络的全貌
查看>>
AR实践:结合ARKit与Agora SDK实现电影中的全息视频会议
查看>>
Spring Core Container 源码分析三:Spring Beans 初始化流程分析
查看>>
vue项目优化--服务端渲染优化
查看>>
OneAPM大讲堂 | 谁更快?JavaScript 框架性能评测
查看>>
深入理解Node中可读流和可写流
查看>>
聊聊spring security的账户锁定
查看>>
new FormData() - FormData对象的作用及用法
查看>>
iKcamp团队制作|基于Koa2搭建Node.js实战项目教学(含视频)☞ 环境准备
查看>>
好文推荐:javascript: 事件委托解析
查看>>
不会接口测试?如何使用eoLinker进行api接口测试
查看>>
通过地图图片生成可交互的地图
查看>>
php+ajax开发手机在线传输文本到电脑
查看>>
基本的隐写术:把任意文件隐藏在一张图片里
查看>>
javascript日期类型(Date)与php日期类型详解
查看>>
记一次vue开发环境搭建
查看>>
使用Jenkins进行持续部署(PHP代码)
查看>>
如何学习服务端开发—以代码工人的视角
查看>>
【219天】黑马程序员27天视频学习笔记【Day22复习脑图】
查看>>
基于 Electron 的爬虫框架 Nightmare
查看>>