Подтвердить что ты не робот

Как обрезать изображение в Android?

Возможный дубликат:
Как обрезать проанализированное изображение в android?

У меня есть изображение в папке res/drawable, и я хотел бы обрезать (например, отрезать часть изображения) изображение при загрузке в ImageView. Однако я не уверен, как это сделать, любые предложения?

4b9b3361

Ответ 1

Из Bitmap.createBitmap: "Возвращает неизменяемое растровое изображение из указанного подмножества исходного растрового изображения. Новый битмап может быть тем же самым объектом, что и источник, или может быть сделана копия. Он инициализируется с той же плотностью, что и исходное растровое изображение".

Передайте ему растровое изображение и определите прямоугольник, из которого будет создано новое растровое изображение.

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

Ответ 2

Менеджер контактов Android 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);

Ответ 3

Попробуйте следующее:

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)

Возвращает неизменяемое растровое изображение из указанного подмножества исходного растрового изображения.

Ответ 4

Если вы хотите равномерно обрезать внешнюю часть изображения, вы должны проверить атрибут ScaleType для ImageView: 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"/>

Ответ 5

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