照片剪裁

 

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()));

    }
}


 

你可能感兴趣的:(照片剪裁)