Android基础--图形处理

计算机变现图片的形式:

     计算机在表现图像时是以像素点来表示的。每一个像素点代表一个颜色,每一个颜色是由6个十六位进制的数据表示如:0001。所以一个颜色就是6*4bit。所以一个分辨率为240*320的图片实际大小是可以这也计算的:240*320*24bit再进行换算。。。

     由于手机分辨率比较低的问题,所以如果高分辨率的图片直接加载到手机中会出现:java.lang.OutOfMemoryError:内存溢出、内存泄露。

解决办法是:根据手机屏幕和原图大小的比例缩放图片。

代码:

//获取ImageView控件
  iv=(ImageView) findViewById(R.id.onimage);
  //首先获取屏幕的分辨率
  WindowManager wm=(WindowManager) getSystemService(WINDOW_SERVICE);
  Display ds=wm.getDefaultDisplay();
  long width=ds.getWidth();
  long height=ds.getHeight();
  //获得图片的分辨率
  Options opts=new Options(); 
  //如果置为true,表示只绑定图片的大小
     opts.inJustDecodeBounds = true;
     Bitmap bitmap=BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/nianhui.JPG", opts);
     long wid=opts.outWidth;
     long hei=opts.outHeight;
  //获得屏幕和图片分辨率的比例
  int w=(int) (wid/width);
  int h=(int) (hei/height);
  if(w>=1&&w>h)
  {
  len=w; 
  }else if(h>=1&&h>w)
  {
   len=h;
  }
  //设置为true表示把图片显示出来
  opts.inJustDecodeBounds=false;
  //设置缩放比例
  opts.inSampleSize=len;
  //缩放图片显示到屏幕上
     Bitmap bm2=BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/nianhui.JPG", opts);
  iv.setImageBitmap(bm2);

    

    在Android的实际开发过程中,我们通常会需要对图形进行其他的处理。如:平移、缩放、倒影、镜面、旋转等。而由于在Android系统中,是不允许直接对原图进行操作的,所以最常用的一种方式是给原图来创建一份副本,这也即使副本操作失败了,也不会影响原图的效果。

     那么给图像创建副本的方式及步骤:

    1.找到原图:

    Bitmap bm=BitmapFactory.decodeResource(getResources(), R.drawable.pre0);

    2.参照原图创建一张白纸

   Bitmap bitmap=Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), bm.getConfig());

   3.参照白纸创建一个画板

   Canvas canvas=new Canvas(bitmap);

   4.创建一支画笔,并为它设置颜色

  Paint paint=new Paint();
  paint.setColor(Color.BLACK);

   5.在画板上开始画画

 //bm表示临摹的原图

//Matrix()操作图形的矩阵对象

//paint画笔

  canvas.drawBitmap(bm,new  Matrix(), paint);
  iv.setImageBitmap(bitmap);

   当有了副本之后我们就可以对图片进行操作了。操作的方法是在第4个步骤后面创建一个矩阵对象,然后通过矩阵对象来对图形进行其他操作。例如下面这个平移的方法:

   //平移
 public void Translate(View view)
 {
  //1.得到原图
     Bitmap bm=BitmapFactory.decodeResource(getResources(), R.drawable.chengbi);
  //2.参考原图创建一张白纸
  Bitmap bitmap=Bitmap.createBitmap(bm.getWidth()+50, bm.getHeight()+50, bm.getConfig());
  //3.参考白纸创建一个画板
  Canvas canvas=new Canvas(bitmap);
  //4.创建一支画笔,并设置颜色
  Paint paint=new Paint();
  paint.setColor(Color.BLACK);
  //处理图形
  Matrix matrix=new Matrix();
  //移动图形
  matrix.setTranslate(50, 50);
  //5.开始在画板上画画
  //bm 代表临摹参照的原图
  //Matrix 矩阵,处理图形临摹
  //paint 画笔
  canvas.drawBitmap(bm,matrix, paint);
  copyiv.setImageBitmap(bitmap);
 }

总结:在Android中操作图形时我们需要谨记2个要素:

1、在Android中不可以直接操作原图,我们只能通过创建副本的方式,来操作图形。

2、Matrix,我们对图形的很多操作,如平移、缩放、倒影、镜面、旋转等。都是通过这个矩阵类来进行操作的。

3、Options,这个类,当我们需要图片的各种信息,比如大小、格式等,需要把opts.inJustDecodeBounds = true;而在处理完图片,需要显示图片之前,需要重新设置这个属性为false:opts.inJustDecodeBounds=false;

 

你可能感兴趣的:(Android基础--图形处理)