Android加载图片的几种方式

本文详细介绍了在Android中加载图片的多种方式,包括从res、raw、assets目录,SD卡,资源ID,文件,字节数组及字节流获取图片。同时探讨了Drawable与Bitmap的转换方法,为开发者提供了全面的图片处理指南。

android中图片分为Drawable和Bitmap,两者可以相互转化,我们在res目录下放的Image图片都可以通过R类索引得到对应的Drawable,而assets目录则不会生成id,raw目录会生成id但不能直接使用

现在讨论获得图片的几种方式

一,获得res/raw目录下的原始图片文件

InputStream is = getResources().openRawResource(R.id.fileNameID) ;

  Bitmap bmp=BitmapFactory.decodeStream(is);

虽然raw目录下的图片文件不加载到内存中,但是他也会生成R类中的ID所以方便使用.

二,获得assets目录下的图片文件

法一

bitmap = BitmapFactory.decodeStream(getAssets().open("example.jpg"));

getAssets().open()返回assets文件对应的文件流.

法二

BitmapDrawable bmp=new BitmapDrawable(getAssets().open("andorra.jpg"));

bitmap=bmp.getBitmap()

三,获得sd卡中的图片

File file = new File(Environment.getExternalStorageDirectory(), name);
if(!file.exists()) return ;
BitmapFactory.Options opts = new BitmapFactory.Options();
//设置为true,代表加载器不加载图片,而是把图片的宽高读出来
opts.inJustDecodeBounds=true;
BitmapFactory.decodeFile(file.getAbsolutePath(), opts);

int imageWidth = opts.outWidth;
int imageHeight = opts.outHeight;
//得到屏幕的宽高
Display display=getWindowManager().getDefaultDisplay();
DisplayMetrics displayMetrics=new DisplayMetrics();
display.getMetrics(displayMetrics);
//获得像素大小
int screenWidth=displayMetrics.widthPixels;
int screenHeight=displayMetrics.heightPixels;

int widthScale=imageWidth/screenWidth;
int heightScale=imageHeight/screenHeight;
int scale = widthScale > heightScale ? widthScale : heightScale;
opts.inJustDecodeBounds=false;
opts.inSampleSize=scale;
Bitmap bm = BitmapFactory.decodeFile(file.getAbsolutePath(), opts);

其实核心代码就是BitmapFac.decodeFile(file.getAbsolutePath(),opts);这里面的其他代码是防治oom

四,从资源ID直接获取

BitmapFactory.decodeResource(res, resId);//这里面的res就是activity的getResources(),resid就是图片id

五,通过文件

BitmapFactory.decodeFile(pathName);

六,通过字节数组

private Bitmap BytesToBitmap(byte[] b)
{
    if (b.length != 0) {
        return BitmapFactory.decodeByteArray(b, 0, b.length);
    } else {
        return null;
    }
}

七,通过字节流

其实这个在上面那些早就见过了

 BitmapFactory.decodeStream(inputStream);

将资源id转为Drawable

Resources resources = mContext.getResources();
Drawable drawable = resources.getDrawable(R.drawable.a);
imageview.setBackground(drawable);

 

从raw文件获得Drawable和bmp

Resources r = this.getContext().getResources();
Inputstream is = r.openRawResource(R.drawable.my_background_image);
BitmapDrawable  bmpDraw = new BitmapDrawable(is);
Bitmap bmp = bmpDraw.getBitmap();

 

从raw文件获得Drawable和bmp

InputStream is = getResources().openRawResource(R.drawable.icon);  

Bitmap mBitmap = BitmapFactory.decodeStream(is);

 

 

 

 

Android加载网页的方式主要有以下几种: 1. **加载服务器上的网页**:使用`WebView`的`loadUrl`方法可以加载服务器上的网页,示例代码如下: ```java WebView mWebView = findViewById(R.id.webView); mWebView.loadUrl("http://www.baidu.com"); ``` 2. **加载本地的网页**:加载本地的`html`有两种常见方式,即从`assets`与`raw`中加载。 - **从`assets`中加载**:可通过以下代码加载其中的`html`文件: ```java WebView mWebView = findViewById(R.id.webView); mWebView.loadUrl("file:///android_asset/index.html"); ``` - **从`raw`中加载**:加载`raw`中的`html`文件示例如下: ```java WebView mWebView = findViewById(R.id.webView); InputStream is = getResources().openRawResource(R.raw.index); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { sb.append(line); } reader.close(); mWebView.loadData(sb.toString(), "text/html", "UTF-8"); ``` 3. **加载在线网页html代码**:可以直接使用`loadUrl`方法加载在线网页的`html`代码,示例如下: ```java private void webHtml() { try { WebView MyWebView = findViewById(R.id.webView); MyWebView.loadUrl("http://www.google.com"); } catch (Exception ex) { ex.printStackTrace(); } } ``` 也可加载在线的图片等资源,示例如下: ```java private void webImage() { try { WebView MyWebView = findViewById(R.id.webView); MyWebView.loadUrl("http://www.google.com.hk/intl/zh-CN/images/logo_cn.gif"); } catch (Exception ex) { ex.printStackTrace(); } } ``` 4. **加载特定内容协议的网页**:使用`content://`协议加载网页,示例代码如下: ```java WebView webview = findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("content://com.android.htmlfileprovider/sdcard/index.html"); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值