Bitmap 图片二次采样 【转载】

1.bitmap概述

Android系统支持几种图片(.png (preferred), .jpg (acceptable), .gif (discouraged)), 其中Bitmap位图#ffffffff,包括图片透明度Alpha和RGB,图片质量很好,每一个像素位占4个字节,如果图片很大将会占据很大的内存空间。存储在SDCard的image很小,加载进内存可能就会很大。因此,对bitmap图像进行操作,应该特别小心,可能出现内存溢出问题。为此对于大图片,应该引入该图片的二次采样生成缩略图。

2.bitmap 缩略图

Android系统支持几种图片(.png (preferred), .jpg (acceptable), .gif (discouraged)), 其中Bitmap位图#ffffffff,包括图片透明度Alpha和RGB,图片质量很好,每一个像素位占4个字节,如果图片很大将会占据很大的内存空间。存储在SDCard的image很小,加载进内存可能就会很大。因此,对bitmap图像进行操作,应该特别小心,可能出现内存溢出问题。为此对于大图片,应该引入该图片的二次采样生成缩略图。

  1. /**
  2. * 根据图片字节数组,对图片可能进行二次采样,不致于加载过大图片出现内存溢出
  3. * @param bytes
  4. * @return
  5. */
  6. public static Bitmap getBitmapByBytes(byte[] bytes){
  7. //对于图片的二次采样,主要得到图片的宽与高
  8. int width = 0;
  9. int height = 0;
  10. int sampleSize = 1; //默认缩放为1
  11. BitmapFactory.Options options = new BitmapFactory.Options();
  12. options.inJustDecodeBounds = true;  //仅仅解码边缘区域
  13. //如果指定了inJustDecodeBounds,decodeByteArray将返回为空
  14. BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
  15. //得到宽与高
  16. height = options.outHeight;
  17. width = options.outWidth;
  18. //图片实际的宽与高,根据默认最大大小值,得到图片实际的缩放比例
  19. while ((height / sampleSize > Cache.IMAGE_MAX_HEIGHT)
  20. || (width / sampleSize > Cache.IMAGE_MAX_WIDTH)) {
  21. sampleSize *= 2;
  22. }
  23. //不再只加载图片实际边缘
  24. options.inJustDecodeBounds = false;
  25. //并且制定缩放比例
  26. options.inSampleSize = sampleSize;
  27. return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
  28. }

转载处:http://www.cnblogs.com/android100/p/Android-Bitmap.html

时间: 2024-11-03 03:33:44

Bitmap 图片二次采样 【转载】的相关文章

图片的压缩(二次采样)

1 package com.qianfeng.bitmapdisplay.tasks; 2 3 import android.graphics.Bitmap; 4 import android.graphics.BitmapFactory; 5 import android.graphics.drawable.Drawable; 6 import android.os.AsyncTask; 7 import android.widget.ImageView; 8 import com.qianf

Android BitmapFactory图片压缩处理(大位图二次采样压缩处理)

Android实际开发中,在加载大量图片的时候,比如ViewPager.GridView.ListView中,加载了大量的比较大图片就容易出现OOM(内存溢出)的异常,这是因为一个应用的最大内存使用只有16M,超过了这个值,就会出现OOM.所以我们实际开发中,要想避免OOM出现就要对相应的图片进行压缩处理. 本文即使用了BitmapFactory和BitmapFactory.Option这两个类,对图片进行相应的尺寸压缩处理.经测试,成功解决了未压缩图片之前出现的OOM异常. 实现效果图: 本D

Android开发之大位图二次采样压缩处理(源代码分享)

图片有各种形状和大小.在许多情况下这些图片是远远大于我们的用户界面(UI)且占据着极大的内存空间,如果我们不对位图进行压缩处理,我们的程序会发生内存泄露的错误. MainActivity的代码 package com.example.g08_bitmap; import android.os.Bundle; import android.app.Activity; import android.content.res.Resources; import android.graphics.Bitm

从本地或者网络读取图片,并转换为Bitmap图片

在做android项目时,我们经常需要从本地或者网络读取图片,并转换为Bitmap图片,以便使用,下面是读取本地图片并转换的方法: Java代码   /** * 得到本地或者网络上的bitmap url - 网络或者本地图片的绝对路径,比如: * * A.网络路径: url="http://blog.foreverlove.us/girl2.png" ; * * B.本地路径:url="file://mnt/sdcard/photo/image.png"; * * 

Android—将Bitmap图片保存到SD卡目录下或者指定目录

直接上代码就不废话啦 一:保存到SD卡下 [java] view plain copy File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+".jpg"); try { out = new FileOutputStream(file); btImage.compress(Bitmap.CompressFormat.JPEG, 90, out); System

android 图片二维码识别和保存(二)

续上一篇,开发图片二维码识别功能后,我们对功能进行性能分析内存占用显著提高了,不使用该功能内存占用大约是147M,使用这个功能多次以后,高达203M. 因此对功能进行研究,发现每次生成的图片没有即时的释放,导致内存中的图片不断累积,内存占用不断攀升.因此,需要对图片进行释放,释放的时候需要特别关注的地方有: 1.释放注意图片的状态. 2.注意异常的捕获. 下面就是图片释放的有关代码. /** * 回收bitmap */ public static void recycleBitmap(Bitma

C#图片灰度处理(位深度24→位深度8)、C#图片二值化处理(位深度8→位深度1)

C#图片灰度处理(位深度24→位深度8) #region 灰度处理 /// <summary> /// 将源图像灰度化,并转化为8位灰度图像. /// </summary> /// <param name="original"> 源图像. </param> /// <returns> 8位灰度图像. </returns> public static Bitmap RgbToGrayScale(Bitmap orig

如何在ListView 里面加载Bitmap图片?

写了一个Application类,里面都是Bitmap图片,还有一些文字,文字可以直接在ListView里显示,但是图片需要怎么显示呢? private Mycuncu app;  app = (Mycuncu) getApplication(); for (int i = 0;i<app.getBmpSize();i++){ Map<String,Object> map = new HashMap<String,Object>(); map.put("Vendin

Android中bitmap图片透明度的处理(以撕美女衣服为例)

原理介绍:将两种不同效果的图片放在相同的位置,改变上面的图片的透明度,就能实现了. 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_h