как преобразовать изображение квадратной формы в овальную форму - PullRequest
0 голосов
/ 23 января 2012

В моем приложении я беру изображение из галереи, и форма этого изображения в квадрате. Я хочу установить это изображение в imageView, тогда оно должно быть овальной формы. Т.е. в моем случае мне нужно обрезать этот образ как человеческое лицо. Кто-нибудь может сказать мне, как сделать это заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 23 января 2012

Используйте следующий класс вместо изображения.

 RoundedCornerImageView imageView1;
 imageView1.setRadius(10);

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

Всего наилучшего:)

public class RoundedCornerImageView extends ImageView {
    private int radius = 10;

    public RoundedCornerImageView(Context context) {
        super(context);
    }

    protected void onDraw(Canvas canvas) {
        Path clipPath = new Path();
        int w = this.getWidth();
        int h = this.getHeight();
        clipPath.addRoundRect(new RectF(0, 0, w, h), radius, radius, Path.Direction.CW);
        canvas.clipPath(clipPath);
        super.onDraw(canvas);
    }

    public RoundedCornerImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public RoundedCornerImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setRadius(int radius){
        this.radius = radius;
        this.invalidate();
    }
}
4 голосов
/ 23 января 2012

Вы можете использовать это

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 = 100;

        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;

    }

Надеюсь, это поможет вам

0 голосов
/ 01 января 2017

enter image description here

Также вы можете использовать это или Загрузить пример демонстрационного кода

public class Shape {

    private Bitmap bmp;
    private ImageView img;
    public Shape(Bitmap bmp, ImageView img) {

        this.bmp=bmp;
        this.img=img;
        onDraw();
    }


    private void onDraw(){

        Canvas canvas=new Canvas();
        if (bmp.getWidth() == 0 || bmp.getHeight() == 0) {
            return;
        }

        int w = bmp.getWidth(), h = bmp.getHeight();

        Bitmap roundBitmap = getOvalCroppedBitmap(bmp, w);

        img.setImageBitmap(roundBitmap);

    }


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

Наконецв своей основной деятельности создайте экземпляр класса Shape и передайте два параметра вашему классу.Изображение, которое будет обрезано до овала, и изображение, где будет установлено ваше окончательное изображение.

Загрузить пример демонстрационного кода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...