当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    Android中Bitmap用法实例分析

    栏目:win服务器问题汇总 时间:2019-11-09 09:34

    本文实例讲述了Android中Bitmap用法。分享给大家供大家参考,具体如下:

    一般在android程序中把图片文件放在res/drawable目录下就可以通过R.drawable.id来使用,但在存储卡中的图片怎样引用呢?下面通过实现这个功能来介绍Bitmap的用法。

    程序如下:

    import java.io.File;
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;
    public class A10Activity extends Activity {
     private Button b;
     private ImageView iv;
     private TextView tv;
     private String fileName="sdcard/picture/红叶.jpg";
     //private String fileName="sdcard/picture/红叶.jpg";这种写法是错误的,路径不是以
    //设备开头
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        b=(Button)findViewById(R.id.button);
        b.setOnClickListener(new OnClickListener(){
      @Override
      public void onClick(View v) {
      // TODO Auto-generated method stub
      iv=(ImageView)findViewById(R.id.imageview);
      tv=(TextView)findViewById(R.id.textview);
      File f=new File(fileName);
    //先判断图片文件是否存在
      if(f.exists()){
    //如果存在,通过Bitmap将图片放入ImageView中显示出来
    /*BitmapFactory(Android.graphics.BitmapFactory)是Android API提供的对象,该对象
    *的decodeFile()方法将手机中的图片文件转换成Bitmap对象。*/
       Bitmap bm=BitmapFactory.decodeFile(fileName);
       iv.setImageBitmap(bm);
       tv.setText(fileName);
      }
      else{
       tv.setText("文件不存在");
      }
      }
      });
      }
    }
    

    BitmapFactory也提供了其他方法,例如decodeResource()可以将res/drawable内预先存入的图片文件转换成Bitmap对象,decodeStream()方法可将InputStream转化成Bitmap对象。 

    下面这个例子是利用Matrix.setRotate()方法来实现ImageView的旋转。原理是将ImageView放入Bitmap中,然后利用Bitmap.createBitmap()方法来创建新的Bitmap对象,在创建的同时,Matrix对象里的setRotate()方法动态旋转新创建的Bitmap.然后将旋转好的Bitmap对象以新构造的方式创建新的Bitmap,并将其放入原来的ImageView中。

    程序如下所示:

    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Matrix;
    import android.graphics.drawable.BitmapDrawable;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;
    public class A11Activity extends Activity {
     private ImageView iv;
     private TextView tv;
     private Button left,right; 
     private int times;
     private int angle;
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        times=1;
        angle=1;
        iv=(ImageView)findViewById(R.id.iv);
        tv=(TextView)findViewById(R.id.tv);
        left=(Button)findViewById(R.id.left);
        left.setText("向左转");    
        right=(Button)findViewById(R.id.right);
        right.setText("向右转");
        final Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.a); //自己引入一张图片a.png
        final int width=bmp.getWidth();
        final int height=bmp.getHeight();
        iv.setImageBitmap(bmp);
        left.setOnClickListener(new OnClickListener(){
      @Override
      public void onClick(View v) {
      // TODO Auto-generated method stub
      angle--;
      if(angle<-20){ //设置最多旋转20度
       angle=-20;
      }
      int width01=width*times;
      int height01=height*times;
      float width02=(float)(width01/width);
      float height02=(float)(width02/height);
      Matrix m=new Matrix();
      m.postScale(width02, height02);
      m.setRotate(5*angle);
      Bitmap bmp01=Bitmap.createBitmap(bmp, 0, 0, width, height, m, true);
      BitmapDrawable bd=new BitmapDrawable(bmp01);
      iv.setImageDrawable(bd);
      tv.setText(Integer.toString(5*angle));
      }
      });
      right.setOnClickListener(new OnClickListener(){
      @Override
      public void onClick(View v) {
      // TODO Auto-generated method stub
      angle++;
      if(angle>20){
       angle=20;
      }
      int width01=width*times;
      int height01=height*times;
      float width02=(float)(width01/width);
      float height02=(float)(width02/height);
      Matrix m=new Matrix();
      m.postScale(width02, height02);
      m.setRotate(5*angle);
      Bitmap bmp01=Bitmap.createBitmap(bmp, 0, 0, width, height, m, true);
      BitmapDrawable bd=new BitmapDrawable(bmp01);
      iv.setImageDrawable(bd);
      tv.setText(Integer.toString(5*angle));
      }
      });
      }
    }