Как обрезать изображение в Android?
Возможный дубликат:
Как обрезать проанализированное изображение в Android?
У меня есть изображение в моей папке res/drawable, и я хотел бы обрезать (т.е. вырезать некоторую часть изображения) изображение при загрузке его в ImageView. Однако я не уверен, как это сделать, какие-либо предложения?
5 ответов
From Bitmap.createBitmap: "Возвращает неизменяемое растровое изображение из указанного подмножества исходного растрового изображения. Новое растровое изображение может быть тем же объектом, что и исходный, или копия может быть создана. Инициализируется с той же плотностью, что и исходное растровое изображение. "
Передайте ему растровое изображение и определите прямоугольник, из которого будет создано новое растровое изображение.
// Take 10 pixels off the bottom of a Bitmap
Bitmap croppedBmp = Bitmap.createBitmap(originalBmp, 0, 0, originalBmp.getWidth(), originalBmp.getHeight()-10);
Менеджер контактов 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);
Попробуй это:
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)
Возвращает неизменное растровое изображение из указанного подмножества исходного растрового изображения.
Если вы хотите одинаково обрезать внешнюю часть изображения, вы должны проверить атрибут 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"/>
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);