android中图片加载到内存的实例代码
程序员文章站
2024-03-06 11:15:01
本文演示android中图片加载到内存
首先设计界面:
代码如下:
本文演示android中图片加载到内存
首先设计界面:
代码如下:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".mainactivity" > <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onclick="load" android:text="加载图片到内存" /> <imageview android:id="@+id/iv" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </linearlayout>
往mnt/sdcard中上传测试图片
添加逻辑部分代码:
public class mainactivity extends activity { private imageview iv; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); iv = (imageview) findviewbyid(r.id.iv); } public void load() { bitmap bitmap = bitmapfactory.decodefile("/sdcard/a.jpg"); iv.setimagebitmap(bitmap); } }
运行代码,产生错误,原因是图片太大(选取的是大照片)
可以使用bitmapfactory中包含的静态类options在不解析图片信息的前提下得到图片的宽高信息:
bitmapfactory.options opts = new options(); // 不去解析图片信息,只是得到图片的头部信息 宽高 opts.injustdecodebounds = true; bitmapfactory.decodefile("/sdcard/a.jpg", opts); int imageheight = opts.outheight; int imagewidth = opts.outwidth; system.out.println("图片宽:" + imagewidth); system.out.println("图片高" + imageheight);
运行一下:
09-04 06:09:10.519: i/system.out(1812): 图片宽:2560
09-04 06:09:10.519: i/system.out(1812): 图片高1920
接下来得到手机屏幕的宽高:
//得到手机屏幕的宽高 windowmanager wm = (windowmanager)getsystemservice(window_service); int height = wm.getdefaultdisplay().getheight(); int width = wm.getdefaultdisplay().getwidth();
可以看到getheight与getwidth方法均已过时,使用下面的方法替代:
// 得到手机屏幕的宽高 windowmanager wm = (windowmanager) getsystemservice(window_service); point outsize = new point(); wm.getdefaultdisplay().getsize(outsize); // 3.0以后的版本才能使用
完整代码如下:
package com.wuyudong.loadimage; import android.os.bundle; import android.annotation.suppresslint; import android.app.activity; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.graphics.bitmapfactory.options; import android.graphics.point; import android.view.menu; import android.view.view; import android.view.windowmanager; import android.widget.imageview; public class mainactivity extends activity { private imageview iv; private int windowheight; private int windowwidth; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); iv = (imageview) findviewbyid(r.id.iv); // 得到手机屏幕的宽高 windowmanager wm = (windowmanager) getsystemservice(window_service); windowheight = wm.getdefaultdisplay().getheight(); windowwidth = wm.getdefaultdisplay().getwidth(); //point outsize = new point(); //wm.getdefaultdisplay().getsize(outsize); // 3.0以后的版本才能使用 //windowheight = outsize.y; //windowwidth = outsize.x; } public void load(view view) { // bitmap bitmap = bitmapfactory.decodefile("/sdcard/a.jpg"); // iv.setimagebitmap(bitmap); // 图片解析的配置 bitmapfactory.options opts = new options(); // 不去解析图片信息,只是得到图片的头部信息 宽高 opts.injustdecodebounds = true; bitmapfactory.decodefile("/sdcard/a.jpg", opts); int imageheight = opts.outheight; int imagewidth = opts.outwidth; system.out.println("图片宽:" + imagewidth); system.out.println("图片高" + imageheight); // 计算缩放比例 int scalex = imagewidth / windowwidth; int scaley = imageheight / windowheight; int scale = 1; if (scalex > scaley & scaley >= 1) { scale = scalex; } if (scaley > scalex & scalex >= 1) { scale = scaley; } //解析图片 opts.injustdecodebounds = false; //采样率 opts.insamplesize = scale; bitmap bitmap = bitmapfactory.decodefile("/sdcard/a.jpg", opts); iv.setimagebitmap(bitmap); } }
以上所述是小编给大家介绍的android中图片加载到内存的实例代码,希望对大家有所帮助
上一篇: IntelliJ IDEA本地代码覆盖后恢复原来的代码图解
下一篇: Android 的回调事件详解