您的位置:首页 > 移动开发 > Android开发

Android Studio——Android Bitmap开发之旅--基本操作

2016-01-15 17:38 495 查看
原文链接:http://blog.csdn.net/weihan1314/article/details/8012283


1 Bitmap加载方式

在介绍Bitmap--OOM 异常时,首先介绍一下Bitmap有哪几种加载方式。通常Bitmap的加载方式有Resource资源加载、本地(SDcard)加载、网络加载等加载方式。


1.1 Resource资源加载

Assets资源加载方式:

[java] view
plaincopy

AssetManager am = getAssets();

InputStream is = am.open("high_pixel_img.jpg");

Bitmap bitmap = BitmapFactory.decodeStream(is);

Res资源加载方式:

[java] view
plaincopy

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.high_pixel_img);


1.2 本地(SDcard)加载

[java] view
plaincopy

String file_name = Environment.getExternalStorageDirectory().toString()+"/"+"high_pixel_img.jpg";

nbsp;Bitmap bitmap = BitmapFactory.decodeFile(file_name);


文件描述符


1.3 网络加载

注意:网络加载图片的时候必须在非主线成中操作

[java] view
plaincopy

String website = "http://www.baidu.com/img/baidu_sylogo1.gif";

URL image_url = new URL(website);

HttpURLConnection conn = (HttpURLConnection) image_url.openConnection();

conn.connect();

InputStream is = conn.getInputStream();

bitmap = BitmapFactory.decodeStream(is);

2 Bitmap | Drawable | InputStream | Byte[ ] 之间进行转换


2.1 Drawable转化成Bitmap

[java] view
plaincopy

Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);

Bitmap bitmap = Bitmap.createBitmap(

drawable.getIntrinsicWidth(),

drawable.getIntrinsicHeight(),

drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888

: Bitmap.Config.RGB_565);

Canvas canvas = new Canvas(bitmap);

//canvas.setBitmap(bitmap);

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

drawable.draw(canvas);


2. 2 Bitmap转换成Drawable

[java] view
plaincopy

Drawable drawable = new BitmapDrawable(bitmap);


2.3 Bitmap转换成byte[]

[java] view
plaincopy

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.high_pixel_img);

ByteArrayOutputStream baos = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);

byte[] info = baos.toByteArray();


2.4 byte[]转换成Bitmap

[java] view
plaincopy

Bitmap bitmap = BitmapFactory.decodeByteArray(byte, 0, b.length);


2.5 InputStream转换成Bitmap

[java] view
plaincopy

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

Bitmap bitmap = BitmaoFactory.decodeStream(is);


2.6 InputStream转换成byte[]

[java] view
plaincopy

InputStream is = getResources().openRawResource(id);//也可以通过其他方式接收一个InputStream对象

ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] b = new byte[1024*2];

int len = 0;

while ((len = is.read(b, 0, b.length)) != -1)

{

baos.write(b, 0, len);

baos.flush();

}

byte[] bytes = baos.toByteArray();

3 转换Bitmap大小

[java] view
plaincopy

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.high_pixel_img);

Bitmap target = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(tartget);

canvas.scale(scale,scale);

Paint paint = new Pain(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG);

canvas.drawBitmap(bitmap,0,0,paint);

bitmap.recycle();

4 将Bitmap保存为本地文件

[java] view
plaincopy

String filename = "save.jpg";

File file = new File(Environmnet.getExternalStorageDirectory,filename);

try{

OutputStream os = new FileOutputString(file);

bitmap.compress(CompressFormat.JPEG,100,os);

}catch(FileNotFoundException e){

e.printStackTrace();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: