Я делаю приложение камеры. У меня есть изображение захвата и обрезки в квадратной форме. Но мне нужна овальная форма или человеческая форма лица. Как это получилось?Как обрезать изображение в форме овальной формы или маски в андроиде?
ответ
Попробуйте с этим ... подрезать в форме человеческого лица
Uri ImageCaptureUri = Uri.fromFile(new File("filepath");
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/*");
intent.setData(ImageCaptureUri);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, 1);
Исследуйте com.android.camera.CropImage.java sources. Он может обрезать круглые изображения.
// if we're circle cropping we'll want alpha which is the third param here
464 mCroppedImage = Bitmap.createBitmap(width, height,
465 mCircleCrop ?
466 Bitmap.Config.ARGB_8888 :
467 Bitmap.Config.RGB_565);
468 Canvas c1 = new Canvas(mCroppedImage);
469 c1.drawBitmap(mBitmap, r, new Rect(0, 0, width, height), null);
470
471 if (mCircleCrop) {
472 // OK, so what's all this about?
473 // Bitmaps are inherently rectangular but we want to return something
474 // that's basically a circle. So we fill in the area around the circle
475 // with alpha. Note the all important PortDuff.Mode.CLEAR.
476 Canvas c = new Canvas (mCroppedImage);
477 android.graphics.Path p = new android.graphics.Path();
478 p.addCircle(width/2F, height/2F, width/2F, android.graphics.Path.Direction.CW);
479 c.clipPath(p, Region.Op.DIFFERENCE);
480
481 fillCanvas(width, height, c);
482 }
Я использовал следующее в одном из своих проектов. Может быть, это поможет вам.
public Drawable getRoundedCornerImage(Drawable bitmapDrawable) {
Bitmap bitmap = ((BitmapDrawable)bitmapDrawable).getBitmap();
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
final float roundPx = 10;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
Drawable image = new BitmapDrawable(output);
return image;
}
Я использовал следующий метод и передал свой захваченный растровый образ этому методу. И это сработает.
public Bitmap getRoundedShape(Bitmap scaleBitmapImage) {
int targetWidth = 125;
int targetHeight = 125;
Bitmap targetBitmap = Bitmap.createBitmap(targetWidth,
targetHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(targetBitmap);
Path path = new Path();
path.addCircle(
((float) targetWidth - 1)/2,
((float) targetHeight - 1)/2,
(Math.min(((float) targetWidth), ((float) targetHeight))/2),
Path.Direction.CCW);
canvas.clipPath(path);
Bitmap sourceBitmap = scaleBitmapImage;
canvas.drawBitmap(
sourceBitmap,
new Rect(0, 0, sourceBitmap.getWidth(), sourceBitmap
.getHeight()), new Rect(0, 0, targetWidth,
targetHeight), p);
return targetBitmap;
}
И выход заключается в следующем: -
@vokilam ты прав; Я только исследовал в код и нашел способ обойти ...
Просто включите эту строку в основной деятельности
intent.putExtra(CropImage.CIRCLE_CROP, "circleCrop");
Но вы получите только круги, а не овальные; так что @amarnathreddy вы не можете вырезать идеальное человеческое лицо с этим; вместо того, чтобы идти на Grabcut of OpenCv
Для овальной формы попробовать эту функцию андроида или download demo here
public static Bitmap getOvalCroppedBitmap(Bitmap bitmap, int radius) {
Bitmap finalBitmap;
if (bitmap.getWidth() != radius || bitmap.getHeight() != radius)
finalBitmap = Bitmap.createScaledBitmap(bitmap, radius, radius,
false);
else
finalBitmap = bitmap;
Bitmap output = Bitmap.createBitmap(finalBitmap.getWidth(),
finalBitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
Paint paint = new Paint();
final Rect rect = new Rect(0, 0, finalBitmap.getWidth(),
finalBitmap.getHeight());
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(Color.parseColor("#BAB399"));
RectF oval = new RectF(0, 0, 130, 150);
canvas.drawOval(oval, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(finalBitmap, rect, oval, paint);
return output;
}
выше функция создает равномерную овальную форму в андроиде программно. обратитесь к функции OnCreate функции и передать изображение, чтобы обрезать овальную форму в виде растрового изображения
- 1. Обрезать изображение в овальной форме
- 2. Как обрезать изображение в круглой форме в андроиде?
- 3. Обрезать изображение с использованием маски
- 4. Как обрезать изображение на основе двоичной маски
- 5. Обрезать изображение в PHP без маски
- 6. Как обрезать проанализированное изображение в андроиде?
- 7. Android растровая обрезка овальной формы
- 8. Crop UIImage в овальной форме
- 9. Как обрезать изображение на основе неправильной формы?
- 10. Расчет радиуса овальной формы
- 11. Добавление овальной формы в JPanel
- 12. Обрезать изображение и поместить его в изображение в андроиде
- 13. Как обрезать видео прикосновением в андроиде?
- 14. Образцы овальной формы в ASP.Net 3.5
- 15. Как обрезать изображение, как показано ниже в андроиде
- 16. Совершенная кружком изображение превращается в половину овальной формы
- 17. Обрезать изображение в C#
- 18. Как обрезать изображение в андроиде с помощью настраиваемого макета обрезки?
- 19. Как обрезать изображение в форме круга в титане?
- 20. Как обрезать изображение в различных формах
- 21. цветочное изображение в андроиде
- 22. Как вырезать или обрезать аудио песню в андроиде программно?
- 23. как динамически менять цвет овальной формы
- 24. Как обрезать/обрезать изображение равномерно в ImageMagick?
- 25. Crop изображение в андроиде
- 26. Обрезать изображение в круговой форме в выбранной области
- 27. Как обрезать видео, используя FFMPEG в андроиде
- 28. Как обрезать изображение в Октаве?
- 29. Как маскировать углы статического содержимого овальной формы?
- 30. Как обрезать изображение в Android?
он просит com.android.gallery класса – amarnathreddy
intent.setComponent (новый ComponentName ("com.android. камера "," com.android.camera.CropImage ")); – Jambaaz
если вы не возражаете, пожалуйста, поделитесь общим кодом пользователя. – amarnathreddy