android之bitmap详解
16lz
2021-01-23
主要介绍加载位图的5中方式:
package com.ghg.BitmapLoad;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.BitmapFactory.Options;import android.os.Bundle;import android.view.View;import android.widget.ImageView;public class Day0702_BitmapLoadActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); } private ImageView imageView;private void initView() {// TODO Auto-generated method stubimageView=(ImageView) findViewById(R.id.iv_image);}public void doClick(View view){/** * 1 .【加载位图】通过文件路径加载位图,显示原图,大小比例不变 *//* Bitmap bmp=BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg");imageView.setImageBitmap(bmp); *//** * 2.【加载位图】通过文件路径加载位图,(若scale 值为n>1) 则图片长,宽变为原来的1/n,相当于把图片压缩到 * 原来的1/(n*n),加载到手机内存占用的空间小,我们可以再xml文件中设置ImageView的scaleType=fitCenter属性, * 进行拉伸自适应操作,拉伸后的图像不是很清楚,但还是可以接受的。 * * *//*Options options=new Options();options.inSampleSize=2; Bitmap bm=BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg", options);imageView.setImageBitmap(bm);*//** * 3.【加载位图】通过文件路径加载位图,此种方式,可以把原图缩小,或放大。 * 下面例子是先压缩再放大。 */Options opts=new Options();//设置仅加载位图边界信息(相当于位图的信息,但没有加载位图)opts.inJustDecodeBounds=true;//加载指定路径图片的边界信息,保存到opts中BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg", opts);//计算收缩比例int xScale=opts.outWidth/200;int yScale=opts.outHeight/200;opts.inSampleSize=xScale>yScale?xScale:yScale;//设置加载边界信息为falseopts.inJustDecodeBounds=false;Bitmap bm=BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg", opts);imageView.setImageBitmap(bm);/** * 4.【加载位图】通过输入流加载位图 *//*FileInputStream is;try {is = new FileInputStream("/mnt/sdcard/dog.jpg");Bitmap bm=BitmapFactory.decodeStream(is);imageView.setImageBitmap(bm);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}*//** * 5.【加载位图】通过字节数组加载位图,图片长,宽减半; *///从网络上读取图片的字符串数组(输入流)//字节数组输出流/*ByteArrayOutputStream out;try {FileInputStream fis=new FileInputStream("/mnt/sdcard/dog.jpg");BufferedInputStream bis=new BufferedInputStream(fis);out = new ByteArrayOutputStream();int hasRead=0;byte[] buffer=new byte[1024*2];while((hasRead=bis.read(buffer))>0){//读出多少数据,向输出流中写入多少out.write(buffer);out.flush();}out.close();fis.close();bis.close();byte[] data=out.toByteArray();//长宽减半Options opts=new Options();opts.inSampleSize=2;Bitmap bm=BitmapFactory.decodeByteArray(data, 0, data.length, opts);imageView.setImageBitmap(bm);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}*/}}
更多相关文章
- android 根据视频路径获取视频缩略图
- Android Studio加载老旧项目会遇到的问题
- java/android 统计文件夹大小及删除文件夹下所有文件和路径
- Android中AppWidget加载流程(一)
- Android下拉刷新和上拉加载更多