《Android大图片之变换缩略图,以及对原始大图片依照指定宽、高裁剪成缩略图》

在Android的ImageView载入图像资源过程中,出于性能和内存开销的须要。有时候须要把一个原始的超大图片依照一定比例等比例缩放成较小的缩略图。或者须要把原始的超大图片,裁剪成指定宽高值的较小图片,针对这样的开发需求,能够使用Android SDK自身提供的工具类:ThumbnailUtils完毕。

ThumbnailUtils的在Android官方的开发文档链接地址:

http://developer.android.com/reference/android/media/ThumbnailUtils.html

以下以一个超大图片为例,使用ThumbnailUtils等比例缩放成缩略图和依照指定的宽高裁剪成满足须要的缩略图。

測试用的MainActivity.java :

package zhangphil.thumbnail;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.ThumbnailUtils;
import android.os.Bundle;
import android.widget.ImageView; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); ImageView imageView0 = (ImageView) findViewById(R.id.imageView0);
// 对原始资源图片不做不论什么处理和调整。直接载入到ImageView。
imageView0.setImageResource(R.drawable.image); Bitmap sourceBitmap = BitmapFactory.decodeResource(this.getResources(),
R.drawable.image); // 把原始bitmap截取成一个 MIN_SIZE * MIN_SIZE 的正方形缩略图。注意:默认是以中心为原点截取成缩略图。
int MIN_SIZE = 300;
ImageView imageView1 = (ImageView) findViewById(R.id.imageView1);
Bitmap bmp1 = ThumbnailUtils.extractThumbnail(sourceBitmap, MIN_SIZE,
MIN_SIZE);
imageView1.setImageBitmap(bmp1); // 获得原始bitmap的高和宽。以下将对原始Bitmap等比例缩放成缩略图载入。 int h = sourceBitmap.getHeight();
int w = sourceBitmap.getWidth(); // 缩略图缩放的比例尺
int THUMB_SIZE; THUMB_SIZE = 5;
// 对原始图片Bitmap等比例缩小5倍的缩略图
ImageView imageView2 = (ImageView) findViewById(R.id.imageView2);
Bitmap bmp2 = ThumbnailUtils.extractThumbnail(sourceBitmap, w / THUMB_SIZE, h
/ THUMB_SIZE);
imageView2.setImageBitmap(bmp2); // 对原始图片Bitmap等比例缩小10倍的缩略图。 THUMB_SIZE = 10;
ImageView imageView3 = (ImageView) findViewById(R.id.imageView3);
Bitmap bmp3 = ThumbnailUtils.extractThumbnail(sourceBitmap, w / THUMB_SIZE, h
/ THUMB_SIZE);
imageView3.setImageBitmap(bmp3);
}
}

MainActivity.java须要的布局文件activity_main.xml :

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <ImageView
android:id="@+id/imageView0"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> <ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> <ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> <ImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout> </ScrollView>

须要处理的目标的大图,原始大图资源:

代码执行处理结果如图所看到的:

Android大图片之缩略图,以及对原图依照指定宽高裁剪成缩略图的更多相关文章

  1. Android大图片裁剪终极解决方案(上:原理分析)

    转载声明:Ryan的博客文章欢迎您的转载,但在转载的同时,请注明文章的来源出处,不胜感激! :-)  http://my.oschina.net/ryanhoo/blog/86842 约几个月前,我正 ...

  2. ThinkPHP 5 文件上传及指定宽高生成缩略图公共方法

    这个是非常常用的案例,ThinkPHP 5 文件上传及指定宽高生成缩略图公共方法/** * 单文件上传 * name:表单上传文件的名字 * ext: 文件允许的后缀,字符串形式 * path:文件保 ...

  3. Android大图片裁剪终极解决方案 原理分析

    约几个月前,我正为公司的APP在Android手机上实现拍照截图而烦恼不已. 上网搜索,确实有不少的例子,大多都是抄来抄去,而且水平多半处于demo的样子,可以用来讲解知识点,但是一碰到实际项目,就漏 ...

  4. Android大图片导致内存问题小结

    在网上看了部分Android中OOM的问题,现在根据理解,做一下笔记. Android OOM 产生的几种原因 1. 程序中使用了太多自己创建的Bitmap. 这种情况通常是最好解决的. 因为你明白你 ...

  5. Android 大图片预览ViewPager

    项目gitHub地址:  https://github.com/bm-x/PhotoView 个人项目gitHub地址:  https://github.com/anan03/ananwork/tre ...

  6. js判断图片上传时的文件大小,和宽高尺寸

    今天在做图片上传的小功能,使用了一个kissy上传组件.很好奇它是如何在图片上传前,检测到图片的大小和尺寸的?我们来写个小实例实现一下吧 如何读取图片的size 首先,原生input file控件有个 ...

  7. Android编程心得-在任意类中获取当前屏幕宽高

    进行Android编程时,很多时候都需要获取当前屏幕的宽度与高度,但是当我们需要在别的类中调用屏幕宽高时,直接用原来的方法是不行的,下面我来介绍如何在任意类中调用宽度高度的两种方法. public v ...

  8. Android大图片裁剪终极解决方案(下:拍照截图)

    http://blog.csdn.net/floodingfire/article/details/8144617 http://mzh3344258.blog.51cto.com/1823534/8 ...

  9. android获取mp4视频文件总时长和视频宽高<转>

    android使用 MediaMetadataRetriever 获取视频文件的 总时长 和视频的分辨率. 根据该方式获取视频信息可以看出不仅仅可以获取时长和分辨率,还能获取到其他的一些视频信息,不错 ...

随机推荐

  1. DP专题:划分数问题

    一.这个专题有什么用 练练DP 练练组合数学 ...... 二.正题 此类问题有如下几种形态: 1. 将n划分成若干正整数之和的划分数.2. 将n划分成k个正整数之和的划分数.3. 将n划分成最大数不 ...

  2. .net 4.0 中的特性总结(一):dynamic

    在新版本的C#中,dynamic关键词是一个很重要的新特性,现在你可以创建动态对象并在运行时再决定它的类型.而且.net 4.0为CLR加入了一组为动态语言服务的运行时环境,称为DLR(Dynamic ...

  3. Java集合框架(简介明了)

    对于集合类,主要需要掌握的就是它的内部结构,以及遍历集合的迭代模式. 接口:Collection Collection是最基本的集合接口,一个Collection代表一组Object,即Collect ...

  4. 解释Eclipse下Tomcat项目部署路径问题(.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps)

    配置eclipse的开发环境,配置jdk的安装路径和tomcat安装路径.在eclipse下建立Dynamic Web Project工程zhgy,在使用eclipse中new一个tomcat,通过启 ...

  5. javascript对内容的操作

    我在这里介绍innerHTML.innerText.innerContent 一,innerHTML(可以识别标签): 案例1:替换掉整个标签 <!--innerHTML--> <p ...

  6. python之数据类型与变量

    第一:变量 变量作用:保存状态:说白了,程序运行的状态就是状态的变化,变量是用来保存状态的,变量值的不断变化就产生了运行程序的最终输出结果 一:声明变量 # -*-coding:utf-8-*- na ...

  7. C# Xamarin移动开发基础进修篇

    一.课程介绍 英文原文:C# is the best language for mobile app development. Anything you can do in Objective-C, ...

  8. C#保存文件为无BOM的utf8格式

    如图所示,发现用C#的 File.WriteAllLines 方法,无论怎么设置,最终生成的文件都是 PC utf8,也就是CRLF,用SVN进行提交的时候,显示左侧为utf8,右侧为utf8 BOM ...

  9. Exchange Online Mailbox Restoration

    User Account is already deleted in AD.User Mailbox is already deleted in Exchange. 1. Connect to Exc ...

  10. Scikit-learn 概述

    https://www.leiphone.com/news/201701/ZJMTak4Y8ch3Nwd0.html