⑴ android 图片加载(一)高效加载Bitmap 基础篇
由于Bitmap的特殊性以及Android对单个应用所规定的最大内存限制,我们在同时加载大量Bitmap时很容易发生内存溢出,即我们通常所说的OutOfMemoryError(OOM),因此高效加载Bitmap就成为了每个Android开发者的必备技能。
在学习如何高效地加载Bitmap之前,首先介绍一下如何加载一个Bitmap。我们都知道,Bitmap在Android中通常指的是一张图片,那么如何将JPG、PNG等格式的图片转换成Bitmap对象呢?BitmapFactory类给我们提供了一些方法:
接下来开始介绍如何高效地加载Bitmap,其实核心思想很简单: 就是采用BitmapFactory.Options参数来调整图片尺寸来适配控件的大小。
假如我们显示图片的控件ImageView宽高为100×100像素,而图片的尺寸为1024×1024像素,这个时候如果将整个图片加载进来并显示到控件上,自然是很占用内存资源的。这个时候可以通过BitmapFactory.Options按一定的采样率加载缩小后的图片,再将缩小后的图片显示到ImageView中,这样就能减小内存占用从而在一定程度上避免OOM的发生。
通过BitmapFactory.Options来缩放图片,主要是使用它的inSampleSize参数,也就是前面提到的采样率。当采样率inSampleSize为1时,采样后的图片大小为原图大小;当采样率inSampleSize>1,比如为2时,采样后的图片宽高都为原图的1/2,即像素降为原图的1/4,占用的内存大小也就是原图的1/4;比较特殊的是,当采样率inSampleSize<1时,系统会自动将该值当做1来处理。 因此可以得出一个结论:采样率inSampleSize必须是大于1的整数图片才会有缩小的效果,并且采样率同时作用于宽高,也就是说采样后的图片会缩小到原图的1/(inSampleSize^2)。比如inSampleSize=4,那么缩放比例为1/16。
我们现在知道了,通过采样率可以提高图片的加载效率,那么如何才能计算出最合适的采样率?我们可以按照如下流程:
接下来以decodeFile方法为例实现图片的缩放,其他三个方法处理方式类似。
下一篇: Android 图片加载(二)图片加载框架Glide 入门篇
《Android开发艺术探索》
⑵ android 怎么获取webview中的图片资源bitmap
加载html页面时,会在/data/data/应用package目录下生成database与cache两个文件夹。
cache里面会保存webview中的图片文件,读的话需要bitmap解析流就可以了。
⑶ android7.0怎么从uri中取出bitmap
private Bitmap getBitmapFromUri(Uri uri)
2 {
3 try
{
5 // 读取uri所在的图片
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
7 return bitmap;
8 }
9 catch (Exception e)
10 {
11 Log.e("[android]", e.getmessage());
12 Log.e("[Android]", "目录为:" + uri);
13 e.printStackTrace();
14 return null;
15 }
16 }
⑷ android怎么获取bitmap左上角坐标
用ImageView来装载这个bitmap并且填满整个ImageView,再用imageview对象来获取坐标值,getX(),getY(),获取的就是左上角的坐标值
⑸ android 怎么获得bitmap对象
保存界面可视化组件,在调用View.getDrawingCache方法前需要调用measure和layout方法才能可以成功获取布局的Bitmap对象
代码如下:
//获得xml的布局截图
View view=getLayoutInflate r().inflate(R.layout.dialog, null);
//打开图像缓存
view.setDrawingCacheEnabled(true);
//需要调用measure和layout方法
view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
//发送位置和尺寸到view及其所有的子view
view.layout(0, 0, view.getMeasuredWidth(),view.getMeasuredHeight());
//获得可视化组件的截图
Bitmap bitmap=view.getDrawingCache();
try {
//保存在sdcard目录下
FileOutputStream fos=new FileOutputStream("/sdcard/test.png");
bitmap.compress(CompressFormat.PNG, 100, fos);
//关闭文件输出流
fos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
⑹ android中怎么获取一个bitmap在屏幕中位置
是要编写一个这样的功能么,android提供的api里面一般图片都是bitmap,可以通过canvas.drawbitmap的方法在view进行图片的绘制,在方法中需要进行传入一个类型为matrix的参数,设置martrix的一些参数就可以进行图片的放大的绘制,这只是显示,也就是mvc中的view层,然后通过提供的一些触摸函数的重写并实现自己需要的一些功能,如拖动,实际上就是改变bitmap绘制的位置。关于触摸的处理和图片的绘制可以在网上进行一些教程的搜索,我就不罗列了,最终就是需要通过控制函数来改变图片的绘制方式,这也许就是你所需要的功能。