android ImageView缩放 旋转
缩放图片和旋转图片要具备的技术
1、得到位图Bitmap的方式我总结了四种方式:
(1)从sdcard中图片路径去取,本例就是采取这种方式 ,如下面的代码,
filename代表图片的路径
Bitmap bm = BitmapFactory.decodeFile(fileName);
(2)从项目的/res/drawable中去取
Bitmap bm =((BitmapDrawable)getResources().getDrawable(R.drawable.icon)).getBitmap();
或
java.io.InputStream is =getResources().openRawResource(R.drawable.icon);
BitmapFactory.Option opts = new BitmapFactory.Options();
opts.inSampleSize = 2;
Bitmap bitmap =BitmapFactory.decodeStream(is,null,opts);
(3)从布局文件中的ImageView中去取(以下代码中imageView是一个ImageView对象,该对象中已经设置了图片)
BitmapDrawable bitmapDrawable = (BitmapDrawable)imageView.getDrawable();
Bitmap bitmap = bitmapDrawable.getBitmap();
(4)从socket中去取
socket读取出的图片内容保存到byte数组中(假设byte数组名是 b,并且b的长度与图片内容长度相等)
Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0,b.length);
2、如?果想改变图片的大小,可以先得到图片的位图对象后,改变位图大小,再设置到ImageView中去,
本编讲的是怎样改变位图的大小示例,该示例把位图放大了1/4
(假设bm是位图Bitmap对象, iv是ImageView对象,int curDegrees = 0)
int bmpW = bm.getWidth();
int bmpH = bm.getHeight();
//设置图片放大比例
double scale = 1.25;
//计算出缩放比例的比例
int scaleW = 1;
int scaleH = 1;
scaleW = (float)(scaleW*scale);
scaleH = (float)(scaleH*scale);
//产生reSize后的Bitmap对象
android.graphics.Matrix mt = newandroid.graphics.Matrix();
mt.postScale(scaleW, scaleH);
Bitmap resizeBmp = Bitmap.createBitmap(bm,0, 0, bmpW, bmpH, mt, true);
3、显示在ImageView中iv.setImageBitmap(resizeBmp);//iv是ImageView对象二、旋转图片(以下示例是把图片放大四分之一再旋转,假设bm是位图Bitmap对象, iv是ImageView对象,intcurDegrees = 0)int bmpW = bm.getWidth(); int bmpH = bm.getHeight(); //设置图片放大比例 double scale = 1.25; //计算出这次要放大的比例 int scaleW = 1; int scaleH = 1; scaleW = (float)(scaleW*scale); scaleH = (float)(scaleH*scale); //产生reSize后的Bitmap对象 android.graphics.Matrix mt = newandroid.graphics.Matrix(); //设置位图缩放比例 mt.postScale(scaleW, scaleH); //设置位图旋转程度 mt.setRotate(curDegrees = curDegrees + 5); //设置例设置好的位图缩放比例与旋转程度改变位图 Bitmap resizeBmp = Bitmap.createBitmap(bm, 0, 0,bmpW, bmpH, mt, true); //把位图显示到ImageView中去 iv.setImageBitmap(resizeBmp);