缩放图片和旋转图片要具备的技术
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 = new
android.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对象,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 = new
android.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);
浙公网安备 33010602011771号