相冊选取,相冊裁剪

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_from_album_data"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="相冊选取——返回值"/>

    <Button
        android:id="@+id/btn_from_album_uri"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="相冊选择——PATH(终极)"/>

    <Button
        android:id="@+id/btn_from_album_path_crop"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="从相冊并截取——PATH(终极)"/>

    <ImageView
        android:id="@+id/image_result"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="fitXY"/>

</LinearLayout>

MainActivity

package com.harvic.blogalbumcropfinally;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class MainActivity extends Activity implements View.OnClickListener {
	// 相冊选取,返回直接得到图片就可以
	private static final int RESULT_ALBUM_ONLY_THROUGH_DATA = 200;
	private static final int RESULT_ALBUM_ONLY_THROUGH_URI = 201;
	private static final int RESULT_ALBUM_CROP_URI = 301;
	private static final int RESULT_ALBUM_CROP_PATH = 302;
	private static final int RESULT_CAMERA_CROP_PATH_RESULT = 401;
	private Uri imageUri;
	private ImageView mImageView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		String path = getSDCardPath();
		File file = new File(path + "/temp.jpg");
		// 获取存放截图的路径信息
		imageUri = Uri.fromFile(file);

		Button btn_from_camera_crop = (Button) findViewById(R.id.btn_from_album_uri);
		Button btn_from_pic = (Button) findViewById(R.id.btn_from_album_data);
		Button btn_from_pic_path_crop = (Button) findViewById(R.id.btn_from_album_path_crop);
		mImageView = (ImageView) findViewById(R.id.image_result);

		btn_from_camera_crop.setOnClickListener(this);
		btn_from_pic.setOnClickListener(this);
		btn_from_pic_path_crop.setOnClickListener(this);
	}

	@Override
	public void onClick(View view) {
		int id = view.getId();
		switch (id) {
		// 通过intent.setData()来返回数据
		case R.id.btn_from_album_data:
			takeAlbumOnlyThroughData();
			break;
		// 通过找到图片的路径,生成相应的URI来显示图片
		case R.id.btn_from_album_uri:
			takeAlbumThroughURI();
			break;
		// 通过找到图片的路径,指定裁剪
		case R.id.btn_from_album_path_crop:
			takeAlbumCropPath();
			break;
		default:
			break;
		}
	}

	/**
	 * 通过相冊选取。直接返回得到相冊图片就可以
	 */
	private void takeAlbumOnlyThroughData() {
		// 启动相冊的ACTION为ACTION_GET_CONTENT
		Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
		intent.setType("image/*");
		startActivityForResult(intent, RESULT_ALBUM_ONLY_THROUGH_DATA);
	}

	/**
	 * 通过找到图片的路径,生成相应的URI来显示图片
	 */
	private void takeAlbumThroughURI() {
		Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
		intent.setType("image/*");
		startActivityForResult(intent, RESULT_ALBUM_ONLY_THROUGH_URI);
	}

	/**
	 * 从相冊并截取——PATH(终极)
	 */
	private void takeAlbumCropPath() {
		Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
		intent.setType("image/*");
		startActivityForResult(intent, RESULT_ALBUM_CROP_PATH);
	}

	public void cropImg(Uri uri) {
		File tempFile = getTempFile();
		Intent intent = new Intent("com.android.camera.action.CROP");
		intent.setDataAndType(uri, "image/*");
		intent.putExtra("crop", "true");
		intent.putExtra("aspectX", 1);
		intent.putExtra("aspectY", 1);
		intent.putExtra("outputX", 700);
		intent.putExtra("outputY", 700);
		intent.putExtra("return-data", false);
		intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
		intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
		intent.putExtra("noFaceDetection", true);
		startActivityForResult(intent, RESULT_CAMERA_CROP_PATH_RESULT);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if (resultCode != Activity.RESULT_OK) {
			return;
		}
		switch (requestCode) {
		/**
		 * 相冊选取,直接返回就可以
		 * 这里没有将return-data设为false,也就是使用了默认值。即直接使用Intent中的data域来传递结果值
		 */
		case RESULT_ALBUM_ONLY_THROUGH_DATA: {
			// 照片的原始资源地址
			try {
				// 能够从一个已知的图片Uri中获得图片的bitmap对象---
				Bitmap photo = MediaStore.Images.Media.getBitmap(
						getContentResolver(), data.getData());
				if (photo != null) {
					// 压缩处理
					Bitmap smallBmp = setScaleBitmap(photo, 2);
					mImageView.setImageBitmap(smallBmp);
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
			break;
		/**
		 * 通过找到图片的路径。生成相应的URI来显示图片
		 */
		case RESULT_ALBUM_ONLY_THROUGH_URI: {
			try {
				// 使用ContentProvider通过URI获取原始图片
				String picPath = parsePicturePath(MainActivity.this,
						data.getData());
				File file = new File(picPath);
				// 获取相机图片的Uri地址信息
				Uri uri = Uri.fromFile(file);
				// 获取图片
				Bitmap photo = MediaStore.Images.Media.getBitmap(
						getContentResolver(), uri);
				if (photo !=
时间: 2024-08-25 20:27:33

相冊选取,相冊裁剪的相关文章

大数相乘、相加、相减、相除

实现大数的加.减.乘.除运算 1 package com.bignumber.test; 2 3 /** 4 * 大数运算(+.-.*./) 5 * @author chen 6 * 7 */ 8 public class BigNumber { 9 10 public static void main(String[] args) { 11 12 String str1 = "123456789";//大数一 13 String str2 = "9876543210&quo

android开发——从相冊中选择图片不裁剪

转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46864777 问题: 在郭神的第一行代码中,第8章的从相冊中选择图片这块,从相冊选一张裁剪后显示到屏幕.可是执行后会发现从相冊选了图片后.没有弹出裁剪的界面,直接返回. 方案: 查找原因时,发现SD卡路径下的output_image.jpg是一个0字节文件.所以 这张图片没有生成.然后我认为是向系统发送选择照片的意图出了问题.我好奇的查看了下系统的图库应用(gallery)源代码

Android调用相机实现拍照并裁剪图片,调用手机中的相冊图片并裁剪图片

在 Android应用中,非常多时候我们须要实现上传图片,或者直接调用手机上的拍照功能拍照处理然后直接显示并上传功能,以下将讲述调用相机拍照处理图片然后显示和调用手机相冊中的图片处理然后显示的功能,要想实现上传功能.一般都是上传到数据库中,将imageView中的图片取出来然后存到数据库中就可以. 以下讲述实现的步骤: 1. 调用相冊中的图片裁剪然后显示. 1.1 使用Intent获取从相冊中选择的照片. 1.2 对获取的图片进行裁剪处理.裁剪处理也是使用Intent调用的Android自带的裁

Android注冊短信验证码功能

一.短信验证的效果是通过使用聚合数据的SDK实现的 ,效果例如以下: 二.依据前一段时间的博客中输了怎么注冊! 注冊之后找到个人中心找到申请一个应用就可以! 三.依据官方文档创建项目 官方文档API下载地址:http://yunpan.cn/cZwc6mum75yYx 訪问password 9f29 (包括了项目jar的导入操作) 四.调用SDK 第一步:创建并配置project(详细方法參见project配置部分的介绍): 第二步:在AndroidManifest中加入开发密钥.所需权限等信息

基于Qt的OpenGL可编程管线学习(15)- 颜色加深、颜色减淡、想家相减

1.颜色加深 shader //颜色加深 uniform sampler2D U_MainTexture; uniform sampler2D U_SubTexture; varying vec2 M_coord; void main() {         vec4 blendColor = texture2D(U_SubTexture, M_coord);         vec4 baseColor = texture2D(U_MainTexture, M_coord);         

SQLDMO注冊

在维护人事系统时.师姐给我们提出一个功能上有问题. 备份数据库时.报黄页.然后须要我们寻找原因,作出解决方式. 一開始我从原先在本机上公布的系统入手,发现没有出现故障.可是.当对程序进行调试时,就出现了错误.错误例如以下: 未处理的"System.Runtime.InteropServices.COMException"类型的异常出如今comlayout.exe 中. 其它信息: 检索 COM 类工厂中 CLSID 为 {0EC8CCC8-EBED-495E-9A9F-313 当时不理

经典语录:最初不相识,最终不相认

1.错过只在一瞬,思念却是一世.真相会让我们痛一阵,但谎言会令我们痛一生.有一种爱明明是深爱却是说不出口,有一种爱明明想放弃却无法放弃.慢慢你 才体会到你爱的滋味,好多事情当时一点也不觉得苦,事后都看得那么清楚.好多事情不经历觉得好笑,经历后觉得自己好笑. 2.有些话,适合烂在心里:有些痛苦,适合无声无息的忘记! 3.爱是什么?爱是两个人因缘分相遇时的怦然心动,是心灵契合时的相知相守.爱就一个字,看似简单,实则困难重重.两个人从相遇,相识,相知,相爱,相 许,相守,直到白发苍苍,垂垂老矣.爱来时

myeclipse6.0下载及注冊码

myeclipse6.0 下载地址.官方下载地址: http://www.myeclipseide.com/module-htmlpages-display-pid-4.html 本地快速下载地址: http://www.rosebush.cn/blog/html/23/t-7423.html http://soft.ghy.cn/software/catalog23/895.html myeclipse6.0注冊码大放送     摘要: myeclipse6.0注冊码大放送 Subscribe

SecureCRT 6.7.1 注冊机 和谐 破解 补丁 方法

之前一直在用SecureCRT 6.5.3 版本号,和谐补丁也好找,甚至中文版本号也可找到(眼下仅仅找到了SecureCRT.6.2.0) 可是换为 6.7.1 后就怎么也注冊不了了.. 没办法试了各种办法: 先是找到了不少注冊码: 如 Name: Sherrill Ray Company: Serial Number:03-40-084141 License Key: ABWGUE ZPPZ6X XHTN2S 1N7PER AB39ZJ PX3312 WS6BZF GHN2ET Issue D