【Android】安卓中常用的图片加载方法
一、通过相机选图片:
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" android:gravity="center_horizontal"> <Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用系统照相机拍照" android:onClick="click"/> <ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>
代码:
package uk.ac.essex.camerademo1; import java.io.File; import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.Display;
import android.view.View;
import android.widget.ImageView; public class Camerademo1Activity extends Activity {
private static final int CAPTURE_PIC = 0; private ImageView imageView; private int width;
private int height;
private String imageFilePath;
private Uri imageFileUri; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageView = (ImageView) findViewById(R.id.imageView);
init();
} private void init() {
Display display = getWindowManager().getDefaultDisplay();
width = display.getWidth();
height = display.getHeight(); imageFilePath = Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED) ? Environment
.getExternalStorageDirectory() + "/1.jpg" : null;
imageFileUri = Uri.fromFile(new File(imageFilePath));
} public void click(View view) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 相机捕捉图片的意图
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageFileUri);// 指定系统相机拍照保存在imageFileUri所指的位置
startActivityForResult(intent, CAPTURE_PIC);// 启动系统相机,等待返回
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && requestCode == CAPTURE_PIC) {
Options options = new Options();
options.inJustDecodeBounds = true;// 设置解码只是为了获取图片的width和height值,而不是真正获取图片
Bitmap bitmap = BitmapFactory.decodeFile(imageFilePath, options);// 解码后可以options.outWidth和options.outHeight来获取图片的尺寸 int widthRatio = (int) Math.ceil(options.outWidth / width);// 获取宽度的压缩比率
int heightRatio = (int) Math.ceil(options.outHeight / height);// 获取高度的压缩比率 if (widthRatio > 1 || heightRatio > 1) {// 只要其中一个的比率大于1,说明需要压缩
if (widthRatio >= heightRatio) {// 取options.inSampleSize为宽高比率中的最大值
options.inSampleSize = widthRatio;
} else {
options.inSampleSize = heightRatio;
}
} options.inJustDecodeBounds = false;// 设置为真正的解码图片
bitmap = BitmapFactory.decodeFile(imageFilePath, options);// 解码图片 imageView.setImageBitmap(bitmap);
}
super.onActivityResult(requestCode, resultCode, data);
} }
二、通过图库选图片:
public void Camera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 相机捕捉图片的意图
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageFileUri);// 指定系统相机拍照保存在imageFileUri所指的位置
startActivityForResult(intent, 1);// 启动系统相机,等待返回
}
public void OpenImage() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 2);// 打开本地图库
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
Log.i("TestFile", "存储卡读取失败.");
return;
}
// Bundle bundle = data.getExtras();
// Bitmap bitmap = (Bitmap) bundle.get("data");//
Options options = new Options();
options.inJustDecodeBounds = true;// 设置解码只是为了获取图片的width和height值,而不是真正获取图片
Bitmap bitmap = BitmapFactory.decodeFile(imageFilePath, options);// 解码后可以options.outWidth和options.outHeight来获取图片的尺寸
int widthRatio = (int) Math.ceil(options.outWidth / width);// 获取宽度的压缩比率
int heightRatio = (int) Math.ceil(options.outHeight / height);// 获取高度的压缩比率
if (widthRatio > 1 || heightRatio > 1) {// 只要其中一个的比率大于1,说明需要压缩
if (widthRatio >= heightRatio) {// 取options.inSampleSize为宽高比率中的最大值
options.inSampleSize = widthRatio;
} else {
options.inSampleSize = heightRatio;
}
}
options.inJustDecodeBounds = false;// 设置为真正的解码图片
bitmap = BitmapFactory.decodeFile(imageFilePath, options);// 解码图片
}
if (requestCode == 2 && resultCode == RESULT_OK && null != data) {
Uri uri = data.getData();
if (!TextUtils.isEmpty(uri.getAuthority())) {
Cursor cursor = getContentResolver().query(uri,
new String[] { MediaStore.Images.Media.DATA }, null,
null, null);
if (null == cursor) {
Tools.ToastShort("打开失败,请重试!");
return;
}
cursor.moveToFirst();
String path = cursor.getString(cursor
.getColumnIndex(MediaStore.Images.Media.DATA));// 选择的本地图片的路径
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
;// 设置解码只是为了获取图片的width和height值,而不是真正获取图片
BitmapFactory.decodeFile(path, opts);// 解码后可以options.outWidth和options.outHeight来获取图片的尺寸
opts.inSampleSize = 10;
opts.inJustDecodeBounds = false;// 设置为真正的解码图片
try {
Bitmap bmp = BitmapFactory.decodeFile(path, opts);
} catch (OutOfMemoryError err) {
}
http://www.eoeandroid.com/thread-3222-1-1.html
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=6552&page=1
【Android】安卓中常用的图片加载方法的更多相关文章
- Android中常见的图片加载框架
图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...
- Android常用的图片加载库
Android常用的图片加载库 前言:图片加载涉及到图片的缓存.图片的处理.图片的显示等.四种常用的图片加载框架,分别是Fresco.ImageLoader. Picasso. Glide. Uni ...
- Android Fresco (Facebook开源的图片加载管理库)
Fresco是Facebook开源的一个图片加载和管理库. 这里是Fresco的GitHub网址. 同类型的开源库市面有非常多,比如Picasso, Universal Image Loader, G ...
- Android开发三种第三方图片加载的框架
最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录. 现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧. 一. ...
- AngularJS中如果ng-src 图片加载失败怎么办
我们知道AngularJS加载图片的方法是用技术分享加ng-src标签,例如: <img ng-src="{{currentUrl}}"/> 其中currentUrl为 ...
- fackbook的Fresco的多种图片加载方法以及解码过程
上篇文章中我们提到了图片加载其实是用了三条线程,如果没看过的同学可以先了解下这里. fackbook的Fresco的Image Pipeline以及自身的缓存机制 那么今天我们就来探索一下如何在代码中 ...
- touchweb手机网站图片加载方法(canvas加载和延迟加载)
一.canvas图片加载 关于canvas加载,我的方法是,将文章中所有用到图片的地方,都用canvas代替,给canvas一个data-src,里面存放img的路径,通过canvas方法渲染图片.因 ...
- Android开发笔记——以Volley图片加载、缓存、请求及展示为例理解Volley架构设计
Volley是由Google开源的.用于Android平台上的网络通信库.Volley通过优化Android的网络请求流程,形成了以Request-RequestQueue-Response为主线的网 ...
- IDEA中Javaweb项目图片加载不出来解决方案
针对IDEA中Javaweb项目中无法加载图片 一.项目的结构及问题介绍 项目结构如下: 在500.jsp页面中访问了img目录下的相关图片,比如背景图片,我在500.jsp中是这样写的路径 bac ...
随机推荐
- vim打开后乱码,xshell打开后也是乱码,设置自动出现行号
Xshell对于嵌入式开发来说,是个非常不错的工具.但或许都有过被中文显示为乱码的问题感觉有点不爽.解决方法其实很简单的,即把xshell编码方式改成UTF-8即可. [文件]–>[打开]–&g ...
- rails下mysql出错问题mysql_api,blog/text
问题一:提示出错:cannot load such file -- mysql/mysql_api (LoadError) 此时我们回来看gem install mysql 时提示 At the ti ...
- thinkphp3.2 常用入口文件
<?php define('DIR_SECURE_FILENAME', 'default.html'); define('APP_PATH','./index/'); //项目路径 requir ...
- 关于Jsp中的三种弹框
对话框有三种 1:只是提醒,不能对脚本产生任何改变: 2:一般用于确认,返回 true 或者 false ,所以可以轻松用于 if...else...判断 3:一个带输入的对话框,可以返回用户填入的字 ...
- tensorflow学习笔记(10) mnist格式数据转换为TFrecords
本程序 (1)mnist的图片转换成TFrecords格式 (2) 读取TFrecords格式 # coding:utf-8 # 将MNIST输入数据转化为TFRecord的格式 # http://b ...
- C++ 模板类友元之输出流操作符重载
几个关键点: 需要前置声明!--奇怪的是别人告诉我也可以不需要,但我这里不行! 友元函数的函数名后面的<>,必须要有. #include <stdio.h> #include ...
- (转)loff_t *ppos是什么东东
ssize_t generic_file_read(struct file * filp, char * buf, size_t count, loff_t *ppos) 这是一个文件读函数 我们很容 ...
- 【AngularJS】AngularJS整合Springmvc、Mybatis环境搭建
近期想学习AngularJS的使用,网上搜了一圈后,折腾了半天解决bug后,成功使用AngularJS整合Springmvc.Spring.Mybatis搭建了一个开发环境.(这里Spring使用的版 ...
- HDF5 文件格式简介
三代测序下机的原始数据不再是fastq格式了,而是换成了hdf5 格式,在做三代数据的分析之前,有必要先搞清楚hdf5 这种文件格式; 官网的链接如下:https://support.hdfgroup ...
- js上传本地图片遇到的问题
1.改变页面文件上传默认的样式 <input type="text" size="20" id="upfile" style=&quo ...