关闭

Android大图片之缩略图,以及对原图按照指定宽高裁剪成缩略图

标签: android
2809人阅读 评论(0) 收藏 举报
分类:


《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>


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



代码运行处理结果如图所示:


0
0
查看评论

【Android】根据宽度自动调整(参照图片本身尺寸)高度

很多时候我们需要让我们的ImageView支持宽度固定,高度自适应的功能。下方代码则提供了一个解决方法。如果你有更好的方案,劳烦评论指正。 /** * 根据宽度自动调整(参照图片本身尺寸)高度<br/> * 需要开启 android:adjustViewBou...
  • u011511368
  • u011511368
  • 2016-07-12 15:36
  • 634

android 调用系统自带的选择图片 然后进行自定义大小裁剪

package com.test.www.xiangjixiangce; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import androi...
  • hzy1991_
  • hzy1991_
  • 2015-12-16 17:59
  • 2022

Android拍照、调用系统图库、裁剪图片到指定大小后输出

在这两天开发过程中要实现一个更换封面的功能,图片可以从系统图库或者照相机拍照,虽然可以通过Intent意向传递简单获取系统功能,但是在处理图片的时候还是遇到了很多问题。 首先我们创建一个uri指向图片路径 Uri imageUri = Uri.parse(file:///sdcard/temp.jp...
  • fanjunjian1991
  • fanjunjian1991
  • 2013-05-03 22:12
  • 32180

Android Studio不显示工具栏图标

今天上午发现一个问题 就是as的工具栏不全了 只有少数的几个 如图 只有左边的一半,经过半天的百度终于有了答案 原来勾选Toolbar就好了 勾选之后
  • CrackgmKey
  • CrackgmKey
  • 2018-01-03 15:56
  • 88

Android 以任意比例裁剪图片

公司的一个小伙伴写的,可以按照任意比例裁剪图片。我觉得挺好用的。简单在这里记录一下,以后肯定还会用到。 public class SeniorCropImageView extends ImageView implements ScaleGestureDetector.OnScaleGestureL...
  • wei1583812
  • wei1583812
  • 2016-11-11 18:44
  • 2245

android打开系统相机分别获得原图和缩略图

第一种:获得缩略图: 打开相机 private void photo() { Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivi...
  • huangxiaoguo1
  • huangxiaoguo1
  • 2016-12-08 15:27
  • 3256

android调用系统相机拍照之获取原图和缩略图

本人新手,第一次写博客,欢迎大家的掌声和鲜花已经鸡蛋。我在网上找了一些有关调用系统拍照的例子,但是怎么实现还是得到了模糊的图片,后面才明白这东西是缩略图。经过一番挣扎和研究终于算是大功告成。 布局我就不贴出来了 只写关键部分, public class MainActivity extends A...
  • u011786371
  • u011786371
  • 2015-01-06 11:53
  • 3925

【android】解决在图库中缩略图与实际图片不对应的问题

问题: 在图库中缩略图与实际图片不对应,比如缩略图显示的明明是A图片,点进去发现显示的是B图片。 解决办法: Go to Setting-->Applications--->Gallery-->Clear Cache After clearing t...
  • u011494050
  • u011494050
  • 2014-09-26 10:22
  • 1645

jquery特效---jquery显示缩略图,点击查看大图,并且大图可自适应原图大小

之前为了实现这样的效果找
  • Larry_Lee88
  • Larry_Lee88
  • 2014-06-21 14:45
  • 4777

缩略图调优---各种格式的缩略图大小比较

缩略图调优        我们生成缩略图的时候,有很多种格式可以选择,下图是一个生成缩略图效果的对比。        原图 比尔 盖茨 家客厅的图片: ...
  • accesine960
  • accesine960
  • 2005-03-08 12:55
  • 5588
    个人资料
    • 访问:1617009次
    • 积分:21053
    • 等级:
    • 排名:第449名
    • 原创:565篇
    • 转载:13篇
    • 译文:2篇
    • 评论:326条
    关于我
    邮箱: zhangphil@live.com
    博客专栏