android之bitmap详解

主要介绍加载位图的5中方式:


[html]  view plain copy
  1. package com.ghg.BitmapLoad;  
  2.   
  3. import java.io.BufferedInputStream;  
  4. import java.io.BufferedReader;  
  5. import java.io.ByteArrayOutputStream;  
  6. import java.io.FileInputStream;  
  7. import java.io.FileNotFoundException;  
  8. import java.io.IOException;  
  9.   
  10. import android.app.Activity;  
  11. import android.graphics.Bitmap;  
  12. import android.graphics.BitmapFactory;  
  13. import android.graphics.BitmapFactory.Options;  
  14. import android.os.Bundle;  
  15. import android.view.View;  
  16. import android.widget.ImageView;  
  17.   
  18. public class Day0702_BitmapLoadActivity extends Activity {  
  19.     /** Called when the activity is first created. */  
  20.     @Override  
  21.     public void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.main);  
  24.         initView();  
  25.     }  
  26.     private ImageView imageView;  
  27.     private void initView() {  
  28.         // TODO Auto-generated method stub  
  29.         imageView=(ImageView) findViewById(R.id.iv_image);  
  30.     }  
  31.       
  32.     public void doClick(View view){  
  33.         /**  
  34.          * 1 .【加载位图】通过文件路径加载位图,显示原图,大小比例不变  
  35.          */  
  36.           
  37.         /*  Bitmap bmp=BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg");  
  38.             imageView.setImageBitmap(bmp);  */  
  39.           
  40.         /**  
  41.          * 2.【加载位图】通过文件路径加载位图,(若scale 值为n>1) 则图片长,宽变为原来的1/n,相当于把图片压缩到  
  42.          * 原来的1/(n*n),加载到手机内存占用的空间小,我们可以再xml文件中设置ImageView的scaleType=fitCenter属性,  
  43.          * 进行拉伸自适应操作,拉伸后的图像不是很清楚,但还是可以接受的。  
  44.          *   
  45.          *      
  46.          */  
  47.           
  48.         /*Options options=new Options();  
  49.         options.inSampleSize=2;   
  50.         Bitmap bm=BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg", options);  
  51.         imageView.setImageBitmap(bm);*/  
  52.           
  53.         /**  
  54.          * 3.【加载位图】通过文件路径加载位图,此种方式,可以把原图缩小,或放大。  
  55.          *    下面例子是先压缩再放大。  
  56.          */  
  57.         Options opts=new Options();  
  58.         //设置仅加载位图边界信息(相当于位图的信息,但没有加载位图)  
  59.         opts.inJustDecodeBounds=true;  
  60.         //加载指定路径图片的边界信息,保存到opts中  
  61.         BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg", opts);  
  62.         //计算收缩比例  
  63.         int xScale=opts.outWidth/200;  
  64.         int yScale=opts.outHeight/200;  
  65.         opts.inSampleSize=xScale>yScale?xScale:yScale;  
  66.         //设置加载边界信息为false  
  67.         opts.inJustDecodeBounds=false;  
  68.         Bitmap bm=BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg", opts);  
  69.         imageView.setImageBitmap(bm);  
  70.           
  71.         /**  
  72.          * 4.【加载位图】通过输入流加载位图  
  73.          */  
  74.           
  75.         /*FileInputStream is;  
  76.         try {  
  77.             is = new FileInputStream("/mnt/sdcard/dog.jpg");  
  78.             Bitmap bm=BitmapFactory.decodeStream(is);  
  79.             imageView.setImageBitmap(bm);  
  80.               
  81.         } catch (FileNotFoundException e) {  
  82.             // TODO Auto-generated catch block  
  83.             e.printStackTrace();  
  84.         }*/  
  85.           
  86.         /**  
  87.          * 5.【加载位图】通过字节数组加载位图,图片长,宽减半;  
  88.          */  
  89.         //从网络上读取图片的字符串数组(输入流)  
  90.         //字节数组输出流  
  91.         /*ByteArrayOutputStream out;  
  92.         try {  
  93.             FileInputStream fis=new FileInputStream("/mnt/sdcard/dog.jpg");  
  94.             BufferedInputStream bis=new BufferedInputStream(fis);  
  95.             out = new ByteArrayOutputStream();  
  96.             int hasRead=0;  
  97.             byte[] buffer=new byte[1024*2];  
  98.             while((hasRead=bis.read(buffer))>0){  
  99.                 //读出多少数据,向输出流中写入多少  
  100.                 out.write(buffer);  
  101.                 out.flush();  
  102.             }  
  103.             out.close();  
  104.             fis.close();  
  105.             bis.close();  
  106.             byte[] data=out.toByteArray();  
  107.             //长宽减半  
  108.             Options opts=new Options();  
  109.             opts.inSampleSize=2;  
  110.             Bitmap bm=BitmapFactory.decodeByteArray(data, 0, data.length, opts);  
  111.             imageView.setImageBitmap(bm);  
  112.               
  113.         } catch (FileNotFoundException e) {  
  114.             // TODO Auto-generated catch block  
  115.             e.printStackTrace();  
  116.         } catch (IOException e) {  
  117.             // TODO Auto-generated catch block  
  118.             e.printStackTrace();  
  119.         }*/  
  120.     }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android 中将 SVG 转换为位图(Bitmap),你可以使用第三方库,如 AndroidSVG 或 SVG。这些库提供了加载和渲染 SVG 的功能,并将其转换为位图。 以下是一个使用 AndroidSVG 库的示例代码,展示如何将 SVG 转换为位图: ```kotlin import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.Picture import com.caverock.androidsvg.SVG import com.caverock.androidsvg.SVGParseException fun convertSvgToBitmap(svgString: String): Bitmap? { try { // 从 SVG 字符串创建 SVG 对象 val svg = SVG.getFromString(svgString) // 获取 SVG 图像的尺寸 val picture = svg.renderToPicture() val width = picture.width val height = picture.height // 创建一个空白的位图 val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) // 在位图上创建画布并绘制 SVG 图像 val canvas = Canvas(bitmap) canvas.drawPicture(picture) return bitmap } catch (e: SVGParseException) { e.printStackTrace() } return null } ``` 在上述示例中,我们使用 AndroidSVG 库的 `SVG.getFromString` 方法从 SVG 字符串创建一个 `SVG` 对象。然后,我们使用 `renderToPicture` 方法将 SVG 渲染为一个 `Picture` 对象,并获取其宽度和高度。接下来,我们使用 `Bitmap.createBitmap` 创建一个与 SVG 图像相同尺寸的空白位图。最后,我们使用画布(Canvas)将 SVG 图像绘制到位图上。 请注意,你需要在项目的 build.gradle 文件中添加 AndroidSVG 依赖项: ```groovy implementation 'com.caverock:androidsvg:1.4' ``` 使用 SVG Android 库的过程类似,你可以尝试根据自己的需求选择合适的库。 希望这个示例对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值