- 浏览: 129163 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
newhxj:
03-21 10:56:35.850: E/Web Conso ...
Android简易Flash播放器[转] -
roiz:
谢谢 很好正需要这资料
精确监听AbsListView滚动至底部[转]
public Bitmap |
inBitmap |
If set, decode methods that take the Options object will attempt to reuse this bitmap when loading content. |
public int |
inDensity |
The pixel density to use for the bitmap. |
public boolean |
inDither |
If dither is true, the decoder will attempt to dither the decoded image. |
public boolean |
inInputShareable |
This field works in conjuction with inPurgeable. |
public boolean |
inJustDecodeBounds |
If set to true, the decoder will return null (no bitmap), but the out… |
public boolean |
inMutable |
If set, decode methods will always return a mutable Bitmap instead of an immutable one. |
public boolean |
inPreferQualityOverSpeed |
If inPreferQualityOverSpeed is set to true, the decoder will try to decode the reconstructed image to a higher quality even at the expense of the decoding speed. |
publicBitmap.Config |
inPreferredConfig |
If this is non-null, the decoder will try to decode into this internal configuration. |
public boolean |
inPurgeable |
If this is set to true, then the resulting bitmap will allocate its pixels such that they can be purged if the system needs to reclaim memory. |
public int |
inSampleSize |
If set to a value > 1, requests the decoder to subsample the original image, returning a smaller image to save memory. |
public boolean |
inScaled |
When this flag is set, if inDensity and inTargetDensity are not 0, the bitmap will be scaled to match inTargetDensity when loaded, rather than relying on the graphics system scaling it each time it is drawn to a Canvas. |
public int |
inScreenDensity |
The pixel density of the actual screen that is being used. |
public int |
inTargetDensity |
The pixel density of the destination this bitmap will be drawn to. |
public byte[] |
inTempStorage |
Temp storage to use for decoding. |
public boolean |
mCancel |
Flag to indicate that cancel has been called on this object. |
public int |
outHeight |
The resulting height of the bitmap, set independent of the state of inJustDecodeBounds. |
public String |
outMimeType |
If known, this string is set to the mimetype of the decoded image. |
public int |
outWidth |
The resulting width of the bitmap, set independent of the state of inJustDecodeBounds.
|
这个表格是从android sdk文档里摘出来的,简单看一下说明就明白是什么意思了。
下面我们回到我们的主题上来:怎样获取图片的大小?
思路很简单:
首先我们把这个图片转成Bitmap,然后再利用Bitmap的getWidth()和getHeight()方法就可以取到图片的宽高了。
新问题又来了,在通过BitmapFactory.decodeFile(String path)方法将突破转成Bitmap时,遇到大一些的图片,我们经常会遇到OOM(Out Of Memory)的问题。怎么避免它呢?
这就用到了我们上面提到的BitmapFactory.Options这个类。
BitmapFactory.Options这个类,有一个字段叫做 inJustDecodeBounds 。SDK中对这个成员的说明是这样的:
If set to true, the decoder will return null (no bitmap), but the out…
也就是说,如果我们把它设为true,那么BitmapFactory.decodeFile(String path, Options opt)并不会真的返回一个Bitmap给你,它仅仅会把它的宽,高取回来给你,这样就不会占用太多的内存,也就不会那么频繁的发生OOM了。
示例代码如下:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bmp = BitmapFactory.decodeFile(path, options);
/* 这里返回的bmp是null */
这段代码之后,options.outWidth 和 options.outHeight就是我们想要的宽和高了。
有了宽,高的信息,我们怎样在图片不变形的情况下获取到图片指定大小的缩略图呢?
比如我们需要在图片不变形的前提下得到宽度为200的缩略图。
那么我们需要先计算一下缩放之后,图片的高度是多少
/* 计算得到图片的高度 */
/* 这里需要主意,如果你需要更高的精度来保证图片不变形的话,需要自己进行一下数学运算 */
int height = options.outHeight * 200 / options.outWidth;
options.outWidth = 200;
options.outHeight = height;
/* 这样才能真正的返回一个Bitmap给你 */
options.inJustDecodeBounds = false;
Bitmap bmp = BitmapFactory.decodeFile(path, options);
image.setImageBitmap(bmp);
复制代码
这样虽然我们可以得到我们期望大小的ImageView
但是在执行BitmapFactory.decodeFile(path, options);时,并没有节约内存。要想节约内存,还需要用到BitmapFactory.Options这个类里的 inSampleSize 这个成员变量。
我们可以根据图片实际的宽高和我们期望的宽高来计算得到这个值。
inSampleSize = options.outWidth / 200;
另外,为了节约内存我们还可以使用下面的几个字段:
options.inPreferredConfig = Bitmap.Config.ARGB_4444; // 默认是Bitmap.Config.ARGB_8888
/* 下面两个字段需要组合使用 */
options.inPurgeable = true;
options.inInputShareable = true;
转至:http://www.alnton.com/?p=196
发表评论
-
android Theme使用总结
2012-12-12 19:22 1426今天对api中style下的theme整个摸了一遍。 ... -
android优化——adapter
2012-12-12 18:56 1470什么是Adapter,可以先看看我的上一篇文章,Andr ... -
listview样式设置——自定义背景、分隔[转]
2012-12-12 14:13 786在Android中,ListView是最常用的一个控件, ... -
draw9patch不失真背景
2012-12-12 00:23 12931.背景自适应且不失真问题的存在 制作自适应背 ... -
android布局之selector(背景选择器)[转]
2012-12-11 23:07 2819关于listview和button都 ... -
android布局之RelativeLayout属性
2012-12-11 23:06 1184android:layout_above ... -
Android ListView下拉刷新点击加载更多[转]
2012-12-03 09:04 1683这个ListView的下拉刷新算是不错了。网上找了很多个 ... -
Android简易Flash播放器[转]
2012-01-20 21:16 1874上一节,大体说了下在Android程序中嵌套Flash动 ... -
将flash嵌入你的程序中[转]
2012-01-20 21:12 1141无论如何,我们需要一个android2.2的平板电脑 ... -
Android实现ListView异步加载图片[转]
2011-11-30 11:17 684ListView异步加载图片是非常实用的方法,凡是是要通过网络 ... -
精确监听AbsListView滚动至底部[转]
2011-11-10 09:00 1401用户使用android客户端时,当Lis ... -
可动态布局的Android抽屉之完整篇[转]
2011-11-10 09:00 1071上次介绍了基础篇,讲解了自定义抽屉控件的基 ... -
可动态布局的Android抽屉之基础[转]
2011-11-10 08:59 1566以前曾经介绍过《Android提高第十九篇 ... -
Android提高第二十一篇之MediaPlayer播放网络视频
2011-11-10 08:59 2615上次讲解了MediaPlayer播放网络音 ... -
Android提高第二十篇之MediaPlayer播放网络音频[转]
2011-11-10 08:58 757以前曾经地介绍过MediaPlayer的基本用 ... -
Android提高第十九篇之"多方向"抽屉[转]
2011-11-09 13:35 1173在android上要实现类似Launch的 ... -
Android提高十八篇之自定义Menu(TabMenu)[转]
2011-11-09 13:35 866用过UCWEB-Android版的人都应 ... -
Android提高十七篇之多级树形菜单的实现[转]
2011-11-09 13:35 860在Android里要实现树形菜单,都是用 ... -
Android提高十六篇之使用NDK把彩图转换灰度图[转]
2011-11-09 13:34 1015在Android上使 ... -
Android提高第十五篇之ListView自适应实现表格[转]
2011-11-09 13:34 848上次介绍了使用GridView实现表格, ...
相关推荐
BitmapFactory.Options
BitmapFactory.Options的使用是在加载图片时,就从图片的加载和使用说起 怎样获取图片的大小? 首先我们把这个图片转成Bitmap,然后再利用Bitmap的getWidth()和getHeight()方法就可以取到图片的宽高了。 新问题又...
幸运的是,BitmapFactory中的可用方法将会调用BitmapFactory.Options类,这使得我们能够定义如何将Bitmap读入内存。具体而言,当加载图像时,可以设置BitmapFactory应该使用的采样大小。在BitmapFactory.Options中...
Android系统中图片一般用Bitmap... BitmapFactory.decodeFile :从文件加载。 BitmapFactory.decodeByteArray :从字节数组加载。 BitmapFactory.decodeStream :从输入流加载。 BitmapFactory.decodeResource :从
BitmapFactory.Options tempOptions = new BitmapFactory.Options(); tempOptions.inJestDecodeBounds = true; BitmapFactory.decodeSteam(is, null, tempOptions); int imageWidth = tempOptions.outWidth; int ...
在将图片转换成Bitmap的时候,由于图片的大小不一样,当遇到很大的图片的时候会出现超出内存的问题,为了解决这个问题Android API提供了BitmapFactory.Options这个类. 2. 由于Android对图片使用内存有限制,若是...
Delegate implementing the native methods of android.graphics.BitmapFactory.
一 . 高效加载 Bitmap ...BitMapFactory.options 就可以按照一定的采样率来加载缩小后的图片,将缩小后的图片置于 ImageView 中显示。 通过采样率即可高效的加载图片,遵循如下方式获取采样率: 将 BitmapFact
1.首先解析出图片文件(注意在这里为了节约内存将inJustDecodeBounds设为true,这样的话解析的图片的话只有图片的尺寸大小信息) 代码如下:BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();...
BitmapFactory.Options options=new BitmapFactory.Options(); options.inJustDecodeBounds=true; BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, options); options....
BitmapFactory.Options options = new BitmapFactory.Options(); options.inMutable = false; Bitmap avatar = BitmapFactory.decodeResource(getResources(), R.drawable.avatar, options); //圆形...
尽量不要使用setImageBitmap、setImageResource、BitmapFactory.decodeResource来设置一张大图,因为这些方法在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。因此,改用先通过...
What's FlipShare ? It's a cool way to show share widget. Demo Usage step 1. Confirm your parentView to ... .addItem(new ShareItem("Twitter", Color.WHITE, 0xff4999F0, BitmapFactory.decodeResource(ge
核心思想是通过BitmapFactory.Options来缩放图片,主要是用到了它的inSampleSize参数(采样率) 当inSampleSize为1的时候,采样后的图片大小为图片的原始大小; 当inSampleSize为2的时候,采样后的图片的宽和高是...
主要是利用BitmapFactory.Options对象的inSampleSize参数,根据空间尺寸与大图尺寸的比率来缩小大图,从而显示大图的缩略图。 二、局部加载大图 主要利用BitmapRegionDecoder类的decodeRegion方法来加载局部区域,...
import android.graphics.BitmapFactory.Options; import android.util.DisplayMetrics; /** * 1.从内存中加载 * 2.本地缓存中加载 * 3.本地加载 * @author Administrator * */ public class ...
1. 通过设置采样率压缩 res资源图片压缩 decodeResource public Bitmap decodeSampledBitmapFromResource(Resources res, int... final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJu
就要用BitmapFactory.Options这个东东了,Options里主要有两个参数比较重要. options.inJustDecodeBounds = false/true; //图片压缩比例. options.inSampleSize = ssize; 我们去解析一个图片,如果太大,就会OOM,...
BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeFile(/sdcard/test.jpg, options); int w = options.outWidth; ...