如何在Android中裁剪图像?

可能重复:
如何在Android中裁剪parsing的图像?

我有一个图像在我res / drawable文件夹中,我想裁剪(即切片的一部分图像)图像加载到ImageView时。 但是我不确定如何做到这一点,有什么build议吗?

来自Bitmap.createBitmap :“从源位图指定的子集返回一个不可变的位图,新的位图可能与源相同,或者可能已经创build了一个副本,它的初始化密度与原始位图相同。 “

将它传递给位图,并定义将从中创build新位图的矩形。

// Take 10 pixels off the bottom of a Bitmap Bitmap croppedBmp = Bitmap.createBitmap(originalBmp, 0, 0, originalBmp.getWidth(), originalBmp.getHeight()-10); 

Android联系人pipe理器EditContactActivity使用Intent("com.android.camera.action.CROP")

这是一个示例代码:

 Intent intent = new Intent("com.android.camera.action.CROP"); // this will open all images in the Galery intent.setDataAndType(photoUri, "image/*"); intent.putExtra("crop", "true"); // this defines the aspect ration intent.putExtra("aspectX", aspectY); intent.putExtra("aspectY", aspectX); // this defines the output bitmap size intent.putExtra("outputX", sizeX); intent.putExtra("outputY", xizeY); // true to return a Bitmap, false to directly save the cropped iamge intent.putExtra("return-data", false); //save output image in uri intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 

尝试这个:

 ImageView ivPeakOver=(ImageView) findViewById(R.id.yourImageViewID); Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.yourImageID); int width=(int)(bmp.getWidth()*peakPercent/100); int height=bmp.getHeight(); Bitmap resizedbitmap=Bitmap.createBitmap(bmp,0,0, width, height); ivPeakOver.setImageBitmap(resizedbitmap); 

从文档:

 static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height) 

从源位图的指定子集中返回一个不可变的位图。

如果你想同样裁剪图像的外部,你应该检查一下ImageView的ScaleType属性: http : //developer.android.com/reference/android/widget/ImageView.ScaleType.html

特别是,你会对“centerCrop”选项感兴趣。 它会剪出大于定义大小的图像的一部分。

以下是在XML布局中执行此操作的示例:

 <ImageView android:id="@+id/title_logo" android:src="@drawable/logo" android:scaleType="centerCrop" android:padding="4dip"/> 
  int targetWidth = 100; int targetHeight = 100; RectF rectf = new RectF(0, 0, 100, 100);//was missing before update Bitmap targetBitmap = Bitmap.createBitmap( targetWidth, targetHeight,Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(targetBitmap); Path path = new Path(); path.addRect(rectf, Path.Direction.CW); canvas.clipPath(path); canvas.drawBitmap( sourceBitmap, new Rect(0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight()), new Rect(0, 0, targetWidth, targetHeight), null); ImageView imageView = (ImageView)findViewById(R.id.my_image_view); imageView.setImageBitmap(targetBitmap);