Android大图片之缩略图,以及对原图依照指定宽高裁剪成缩略图
《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大图片之缩略图,以及对原图依照指定宽高裁剪成缩略图的更多相关文章
- Android大图片裁剪终极解决方案(上:原理分析)
转载声明:Ryan的博客文章欢迎您的转载,但在转载的同时,请注明文章的来源出处,不胜感激! :-) http://my.oschina.net/ryanhoo/blog/86842 约几个月前,我正 ...
- ThinkPHP 5 文件上传及指定宽高生成缩略图公共方法
这个是非常常用的案例,ThinkPHP 5 文件上传及指定宽高生成缩略图公共方法/** * 单文件上传 * name:表单上传文件的名字 * ext: 文件允许的后缀,字符串形式 * path:文件保 ...
- Android大图片裁剪终极解决方案 原理分析
约几个月前,我正为公司的APP在Android手机上实现拍照截图而烦恼不已. 上网搜索,确实有不少的例子,大多都是抄来抄去,而且水平多半处于demo的样子,可以用来讲解知识点,但是一碰到实际项目,就漏 ...
- Android大图片导致内存问题小结
在网上看了部分Android中OOM的问题,现在根据理解,做一下笔记. Android OOM 产生的几种原因 1. 程序中使用了太多自己创建的Bitmap. 这种情况通常是最好解决的. 因为你明白你 ...
- Android 大图片预览ViewPager
项目gitHub地址: https://github.com/bm-x/PhotoView 个人项目gitHub地址: https://github.com/anan03/ananwork/tre ...
- js判断图片上传时的文件大小,和宽高尺寸
今天在做图片上传的小功能,使用了一个kissy上传组件.很好奇它是如何在图片上传前,检测到图片的大小和尺寸的?我们来写个小实例实现一下吧 如何读取图片的size 首先,原生input file控件有个 ...
- Android编程心得-在任意类中获取当前屏幕宽高
进行Android编程时,很多时候都需要获取当前屏幕的宽度与高度,但是当我们需要在别的类中调用屏幕宽高时,直接用原来的方法是不行的,下面我来介绍如何在任意类中调用宽度高度的两种方法. public v ...
- Android大图片裁剪终极解决方案(下:拍照截图)
http://blog.csdn.net/floodingfire/article/details/8144617 http://mzh3344258.blog.51cto.com/1823534/8 ...
- android获取mp4视频文件总时长和视频宽高<转>
android使用 MediaMetadataRetriever 获取视频文件的 总时长 和视频的分辨率. 根据该方式获取视频信息可以看出不仅仅可以获取时长和分辨率,还能获取到其他的一些视频信息,不错 ...
随机推荐
- Redis设计与实现:读书笔记之二
1.数据库 Redis服务器一般包含多个db,默认16个. 切换数据库 每个redis客户端都有自己的目标数据库,默认为0,可以通过select 1,切换数据库. 设置键的生存周期和过期时间 PTTL ...
- kvm部署
第一:安装前准备 vmware workstation的虚拟机做kvm实验,需要开启嵌套虚拟化 1.首先在物理机BIOS设置里开启虚拟化功能 2.其次需要在vm里面开启一下两个功能,(关闭虚拟机勾选即 ...
- 开源流媒体服务器SRS学习笔记(4) - Cluster集群方案
单台服务器做直播,总归有单点风险,利用SRS的Forward机制 + Edge Server设计,可以很容易搭建一个大规模的高可用集群,示意图如下 源站服务器集群:origin server clus ...
- RbbitMQ消息队列及python实现
1.简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的 ...
- quartz集群分布式(并发)部署解决方案
项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...
- MySQL导出TSV格式文件
可以使用mysqldump, 也可以使用mysql -e 使用mysqldump 因为要使用到 -T / --tab 参数, 需要先查看mysql设置的secure_file_priv mysql&g ...
- 自建k8s集群日志采集到阿里云日志服务
自建k8s集群 的master 节点安装 logtail 采集工具 wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.c ...
- 【C++】C++中的函数
目录结构: contents structure [-] 简介 可变形参的函数 initializer_list形参 省略符形参 main函数处理命令行选项 函数指针与函数引用 inline内联函数 ...
- python itertools 模块讲解
1.介绍itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存. 使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环. - 无限迭代器 itertool ...
- 物联网架构成长之路(25)-Docker构建项目用到的镜像1
0. 前言 现在项目处于初级阶段,按照规划,先构建几个以后可能会用到的Image,并上传到阿里云的Docker仓库.以后博客中用到的Image,大部分都会用到这几个基础的Image,构建一个简单的物联 ...