一些有关Android图片的操作,判断方向,旋转,根据uri获取绝对路径,缩放与移动
2015-01-28 17:15
731 查看
//获取图片方向
public static int readPictureDegree(String path) { int degree = 0; try { ExifInterface exifInterface = new ExifInterface(path); int orientation = exifInterface.getAttributeInt( ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: degree = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: degree = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: degree = 270; break; } } catch (IOException e) { e.printStackTrace(); } return degree; }
//旋转图片
public static Bitmap rotate(Bitmap b, int degrees) { if(degrees==0){ return b; } if (degrees != 0 && b != null) { Matrix m = new Matrix(); m.setRotate(degrees, (float) b.getWidth() , (float) b.getHeight() ); try { Bitmap b2 = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), m, true); if (b != b2) { b.recycle(); // Android开发网再次提示Bitmap操作完应该显示的释放 b = b2; } } catch (OutOfMemoryError ex) { // Android123建议大家如何出现了内存不足异常,最好return 原始的bitmap对象。. } } return b; }
//根据uri获取绝对路径
protected String getAbsoluteImagePath(Uri uri) { // can post image String [] proj={MediaStore.Images.Media.DATA}; Cursor cursor = managedQuery( uri, proj, // Which columns to return null, // WHERE clause; which rows to return (all rows) null, // WHERE clause selection arguments (none) null); // Order-by clause (ascending by name) int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); }
//支持多点触控的缩放与移动
<span style="white-space:pre"> </span> Matrix matrix=new Matrix(); <span style="white-space:pre"> </span> Matrix savedMatrix=new Matrix(); <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> PointF start=new PointF(); <span style="white-space:pre"> </span> PointF mid=new PointF(); <span style="white-space:pre"> </span> float oldDist; <span style="white-space:pre"> </span> //模式 <span style="white-space:pre"> </span> static final int NONE=0; <span style="white-space:pre"> </span> static final int DRAG=1; <span style="white-space:pre"> </span> static final int ZOOM=2; <span style="white-space:pre"> </span> int mode=NONE; <span style="white-space:pre"> </span>ImageView image ;
@Override public boolean onTouch(View arg0, MotionEvent arg1) { // TODO Auto-generated method stub ImageView myImageView=(ImageView) arg0; switch(arg1.getAction()&MotionEvent.ACTION_MASK){ //设置拖拉模式 case MotionEvent.ACTION_DOWN: matrix.set(myImageView.getImageMatrix()); savedMatrix.set(matrix); start.set(arg1.getX(),arg1.getY()); mode=DRAG; break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: mode=NONE; break; //设置多点触摸模式 case MotionEvent.ACTION_POINTER_DOWN: oldDist=spacing(arg1); if(oldDist>10f){ savedMatrix.set(matrix); midPoint(mid, arg1); mode=ZOOM; } break; //若为DRAG模式,则点击移动图片 case MotionEvent.ACTION_MOVE: if(mode==DRAG){ matrix.set(savedMatrix); matrix.postTranslate(arg1.getX()-start.x,arg1.getY()-start.y); } //若为ZOOM模式,则点击触摸缩放 else if(mode==ZOOM){ float newDist=spacing(arg1); if(newDist>10f){ matrix.set(savedMatrix); float scale=newDist/oldDist; //设置硕放比例和图片的中点位置 matrix.postScale(scale,scale, mid.x,mid.y); } } break; } myImageView.setImageMatrix(matrix); return true; } //计算移动距离 private float spacing(MotionEvent event){ float x=event.getX(0)-event.getX(1); float y=event.getY(0)-event.getY(1); return FloatMath.sqrt(x*x+y*y); } //计算中点位置 private void midPoint(PointF point,MotionEvent event){ float x=event.getX(0)+event.getX(1); float y=event.getY(0)+event.getY(1); point.set(x/2,y/2); }
要在xml中将imageview设置为android:scaleType="matrix"
相关文章推荐
- Android根据图片Uri获取图片绝对路径
- Android根据URI获取图片绝对路径
- android 根据uri获取路径及图片压缩、旋转的学习笔记
- Android根据图片Uri获取图片绝对路径
- Android根据图片Uri获取图片绝对路径
- android根据uri或文件绝对路径获取文件基本信息
- android 根据Uri获取文件绝对路径
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- Android手机读取相册图片,根据URI获取图片路径
- 老马的技术博客 android系统通过图片绝对路径获取URI的三种方法
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- Android根据uri获取图片的路径(4.4+)
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据uri获取图片的绝对路径
- android系统通过图片绝对路径获取URI的三种方法
- android系统通过图片绝对路径获取URI的三种方法
- Android开发:对图片的手势操作——旋转、缩放、移动