Canvas类用来实现绘制.通过组合使用Canvas类的成员函数可以实现随心随欲地绘制图片的任何部分.
Canvas.clipRect:设置显示区域
Canvas.drawBitmap:绘制
例子:
Bitmap b=BitmapFactory.decodeStream("图片编号", null);//读取图片
...
Canvas c = null;//实例Canvas
c.save();//记录原来的canvas状态
c.clipRect(100,100,200,300);//显示从(100,100)到(200,300)的区域(单位:象素)
c.drawBitmap(b,10,0,null); //将阉割过的图片画到(10,0)位置
c.restore();//恢复canvas状态
如果觉得这个方法还是不够灵活方便,那就像素级操作,那更快更灵活。
===================
width = imgBit.getWidth(); //得到图片的宽,高 height = imgBit.getHeight(); Rect src = new Rect(); //要剪裁的区域 Rect dst = new Rect(); src.left=inx*width/row; src.top=iny*height/line; Matrix matrix=new Matrix(); matrix.setTranslate(src.top, src.left); Bitmap tranBitmap=Bitmap.createBitmap(imgBit,src.top,src.left,(width/row),(height/line),matrix,true); g.drawBitmap(tranBitmap, matrix, paint); |
=======================
Android裁剪图片最简单方法[转]
很多网友平时如果需要在Android平台下开发处理图片裁剪的应用,如果感觉实现的逻辑比较麻烦,比如说需要写类此Win32下的橡皮筋类CRectTracker来设置裁剪区域,这里Android开发网给大家一个最简单可靠的方法,通过下面的Intent调用系统的Camera程序的裁剪功能实现图片修剪。
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
不过这里Android123提醒大家可能会出现无法找到Activity的android.content.ActivityNotFoundException异常,这是由于Android内部的gallery和camera都有处理,可以尝试另一种URI,com.android.gallery的com.android.camera.CropImage,在setClassName时,具体的代码为
final Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
intent.setData(Uri.fromFile(mFile));
intent.putExtra("outputX", width);
intent.putExtra("outputY", height);
intent.putExtra("aspectX", width);
intent.putExtra("aspectY", height);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra("output", Uri.parse("file:/" + mFile.getAbsolutePath()));
startActivityForResult(intent, REQUEST_CROP_IMAGE);
=========
/* 裁剪一个已有图片并且保存到原图片 */ public class MyCrop extends Activity { private File tempFile; Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.tempFile = new File("/sdcard/camera.jpg");//替换为你想要编辑的图片 button = new Button(this); button.setText("获取图片"); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(Uri.fromFile(tempFile), "image/*");//设置要裁剪的图片 intent.putExtra("crop", "true");// crop=true 有这句才能出来最后的裁剪页面. /*intent.putExtra("aspectX", 1);// 这两项为裁剪框的比例. intent.putExtra("aspectY", 1);// x:y=1:1 // 如果不设置aspectX和aspectY,则可以以任意比例缩放 */ /*intent.putExtra("outputX", 96); intent.putExtra("outputY", 96);//设置为96*96 */ intent.putExtra("output", Uri.fromFile(tempFile));//保存到原文件 intent.putExtra("outputFormat", "JPEG");// 返回格式 startActivityForResult(intent, 1); } }); setContentView(button); } /** * 裁剪完图片后系统调用的方法:onActivityResult */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) if (requestCode == 1) button.setBackgroundDrawable(Drawable.createFromPath(tempFile.getAbsolutePath())); } }