读书人

Matrix放大、缩小跟旋转图片

发布时间: 2012-07-01 13:15:00 作者: rapoo

Matrix放大、缩小和旋转图片

一、放大、缩小图片

?

private LinearLayout imageLayout;private ImageView imageView;private Button bt_big;private Button bt_small;private float scaleWidth = 1;private float scaleHeight = 1;private int id = 0;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.big_small);imageLayout = (LinearLayout) findViewById(R.id.imageLayout);imageView = (ImageView) findViewById(R.id.imageView1);bt_big = (Button) findViewById(R.id.button1);bt_small = (Button) findViewById(R.id.button2);bt_big.setOnClickListener(new Button.OnClickListener() {public void onClick(View v) {big(imageView);}});bt_small.setOnClickListener(new Button.OnClickListener() {public void onClick(View v) {small(imageView);}});}/* 图片放大的method */private void big(ImageView mImageView) {// ImageView对象(iv_photo)必须做如下设置后,才能获取其中的图像mImageView.setDrawingCacheEnabled(true);// 获取ImageView中的图像Bitmap bmp = Bitmap.createBitmap(mImageView.getDrawingCache());// 从ImaggeView对象(iv_photo)中获取图像后,要记得调用setDrawingCacheEnabled(false)// 清空画图缓冲区mImageView.setDrawingCacheEnabled(false);int bmpWidth = bmp.getWidth();int bmpHeight = bmp.getHeight();/* 设定图片放大的比例 */double scale = 1.25;/* 计算这次要放大的比例 */scaleWidth = (float) (scaleWidth * scale);scaleHeight = (float) (scaleHeight * scale);/* 产生reSize后的Bitmap对象 */Matrix matrix = new Matrix();matrix.postScale(scaleWidth, scaleHeight);Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight,matrix, true);if(id == 0){imageLayout.removeView(mImageView);}else{imageLayout.removeView((ImageView)findViewById(id));}id = id + 1;ImageView imageView = new ImageView(BigAndSmall.this);imageView.setId(id);imageView.setImageBitmap(resizeBmp);imageLayout.addView(imageView);}/* 图片缩小的method */private void small(ImageView mImageView) {// ImageView对象(iv_photo)必须做如下设置后,才能获取其中的图像mImageView.setDrawingCacheEnabled(true);// 获取ImageView中的图像Bitmap bmp = Bitmap.createBitmap(mImageView.getDrawingCache());// 从ImaggeView对象(iv_photo)中获取图像后,要记得调用setDrawingCacheEnabled(false)// 清空画图缓冲区mImageView.setDrawingCacheEnabled(false);int bmpWidth = bmp.getWidth();int bmpHeight = bmp.getHeight();/* 设定图片放大的比例 */double scale = 0.8;/* 计算这次要放大的比例 */scaleWidth = (float) (scaleWidth * scale);scaleHeight = (float) (scaleHeight * scale);/* 产生reSize后的Bitmap对象 */Matrix matrix = new Matrix();matrix.postScale(scaleWidth, scaleHeight);Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight,matrix, true);if(id == 0){imageLayout.removeView(mImageView);}else{imageLayout.removeView((ImageView)findViewById(id));}id = id + 1;ImageView imageView = new ImageView(BigAndSmall.this);imageView.setId(id);imageView.setImageBitmap(resizeBmp);imageLayout.addView(imageView);}

?big_small.xml

?

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/imageLayout"><ImageViewandroid:layout_width="wrap_content"android:src="@drawable/img2"android:layout_height="wrap_content"android:id="@+id/imageView1"></ImageView></LinearLayout><Buttonandroid:text="放大"android:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"></Button><Buttonandroid:text="缩小"android:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"></Button></LinearLayout>
?


Matrix放大、缩小跟旋转图片

?
Matrix放大、缩小跟旋转图片

?

二、旋转图片

?

private ImageView imageView;private Button bt_left;private Button bt_right;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.rotate);imageView = (ImageView) findViewById(R.id.imageView1);bt_left = (Button) findViewById(R.id.button1);bt_right = (Button) findViewById(R.id.button2);bt_left.setOnClickListener(new OnClickListener(){public void onClick(View v) {rotate(imageView , 90);}});bt_right.setOnClickListener(new OnClickListener(){public void onClick(View v) {rotate(imageView , -90);}});}public void rotate(ImageView imageView, int scaleAngle) {Bitmap bitmap = getBitmapFromImage(imageView);int widthOrig = bitmap.getWidth();int heightOrig = bitmap.getHeight();/* ScaleTimes=1,维持1:1的宽高比例 */int scaleTimes = 1;int newWidth = widthOrig * scaleTimes;int newHeight = heightOrig * scaleTimes;/* 计算旋转的Matrix比例 */float scaleWidth = ((float) newWidth) / widthOrig;float scaleHeight = ((float) newHeight) / heightOrig;Matrix matrix = new Matrix();/* 使用Matrix.postScale设定维度 */matrix.postScale(scaleWidth, scaleHeight);/* 使用Matrix.postRotate方法旋转Bitmap */// matrix.postRotate(5*ScaleAngle);matrix.setRotate(5 * scaleAngle);/* 建立新的Bitmap对象 */Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, widthOrig,heightOrig, matrix, true);BitmapDrawable myNewBitmapDrawable = new BitmapDrawable(resizedBitmap);imageView.setImageDrawable(myNewBitmapDrawable);}public Bitmap getBitmapFromImage(ImageView mImageView) {// ImageView对象(iv_photo)必须做如下设置后,才能获取其中的图像mImageView.setDrawingCacheEnabled(true);// 获取ImageView中的图像Bitmap bmp = Bitmap.createBitmap(mImageView.getDrawingCache());// 从ImaggeView对象(iv_photo)中获取图像后,要记得调用setDrawingCacheEnabled(false)// 清空画图缓冲区mImageView.setDrawingCacheEnabled(false);return bmp;}
?


Matrix放大、缩小跟旋转图片
?
Matrix放大、缩小跟旋转图片

读书人网 >移动开发

热点推荐