2012-10-17 23 views
7

Kann jemand ein Bild \ Bitmap zu einem Kreis zuschneiden? Ich kann keine Lösung finden, sorry ..Crop Bild als Kreis in Android

+0

@ user1281750 genau Frage ausführlich lesen! Es ist kein Duplikat wie! –

+0

mögliches Duplikat von [Ausschnittsfläche aus Bitmap in Android beschneiden] (http://stackoverflow.com/questions/11932805/croping-circular-area-from-bitmap-in-android) – Adinia

Antwort

1

Versuchen mit folgendem Code:

public Bitmap getRoundedShape(Bitmap scaleBitmapImage) { 
    // TODO Auto-generated method stub 
    int targetWidth = 50; 
    int targetHeight = 50; 
    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), null); 
    return targetBitmap; 
} 
+0

Nicht funktioniert. Bitte schlage mich vor. – Arun

2

Klasse:

public Bitmap getRoundedShape(Bitmap scaleBitmapImage) { 

    int targetWidth = 50; 
    int targetHeight = 50; 
    Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, 
         targetHeight,Bitmap.Config.ARGB_8888); 
         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), null); 
    return targetBitmap; 
    } 

Ausblick:

<ImageView 
     android:id="@+id/imgView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/btnEdit" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="40dp" 
     android:background="@drawable/rounded" 
     android:adjustViewBounds="true" 
     android:gravity="center" 
     android:src="@drawable/happy"/> 

Weitere Stile:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 

<solid android:color="@android:color/white" /> 

<stroke 
    android:width="3dip" 
    android:color="#FF0000" /> 

<corners android:radius="10dp" /> 

<padding 
    android:bottom="0dp" 
    android:left="0dp" 
    android:right="0dp" 
    android:top="0dp" /> 

2

Romain Guy, früher ein Ingenieur auf dem Android-Team bei Google erzielte einen ausgezeichneten Artikel auf drawing images with rounded corners. Diese Idee könnte leicht zu einem Kreis erweitert werden, indem zum Beispiel der abgerundete Rechteckradius so geändert wird, dass ein vollständiger Kreis entsteht.

Aus dem Artikel:

Um die abgerundeten Bilder zu erzeugen ich einfach eine benutzerdefinierte schrieb Drawable dass ein abgerundetes Rechteck zeichnet Canvas.drawRoundRect() verwenden. Der Trick ist , ein Paint mit einem BitmapShader zu verwenden, um das gerundete Rechteck mit eine Beschaffenheit anstelle einer einfachen Farbe zu füllen. Hier ist, was der Code wie folgt aussieht:

BitmapShader shader; shader = new BitmapShader(bitmap, 
Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 

Paint paint = new Paint(); paint.setAntiAlias(true); 
paint.setShader(shader); 

RectF rect = new RectF(0.0f, 0.0f, width, height); 

// rect contains the bounds of the shape 
// radius is the radius in pixels of the rounded corners 
// paint contains the shader that will texture the shape 
canvas.drawRoundRect(rect, radius, radius, paint); 
+1

Canvas macht auch eine [drawCircle] (http://developer.android.com/reference/android/graphics/Canvas.html) Methode verfügbar, die für diesen Fall besser geeignet sein könnte. – greg7gkb

0
finalBitmapShader shader = newBitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 
mPaint.setShader(shader); 
mBitmapWidth=mBitmap.getWidth(); 
mBitmapHeight=mBitmap.getHeight(); 
} 
@Override 
public void draw(Canvas canvas{ 
    canvas.drawOval(mRectF,mPaint); 
} 
@Override 
protected void onBoundsChange(Rect bounds) { 
    super.onBoundsChange(bounds); 
    mRectF.set(bounds); 
} 

ich hier eine Probe Tutorial davon bei http://androidgreeve.blogspot.in/2014/09/facebook-messanger-like-profile-image.html?m=1

1

Wiseman Design gefunden, hat eine Open-Source-Rundimagegebrauchsfertig

https://github.com/wisemandesigns/CircularImageView

Dies verwendet XML in Ihren Layouts, die macht das Leben leichter. Sie können die Quelle in XML setzen oder mit ein paar kleineren Änderungen eine Bitmap verwenden.

Disclaimer: Ich für Wiseman arbeiten Designs

1

Für abgerundete Ecken für Image mit, Ihr Bild in Bitmap umwandeln und dann versuchen, folgenden Code:

 private Bitmap getRoundedCroppedBitmap(Bitmap bitmap) { 
     int widthLight = bitmap.getWidth(); 
     int heightLight = bitmap.getHeight(); 

     Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),Config.ARGB_8888); 

     Canvas canvas = new Canvas(output); 
     Paint paintColor = new Paint(); 
     paintColor.setFlags(Paint.ANTI_ALIAS_FLAG); 

     RectF rectF = new RectF(new Rect(0, 0, widthLight, heightLight)); 

     canvas.drawRoundRect(rectF, widthLight/2 ,heightLight/2,paintColor); 

     Paint paintImage = new Paint(); 
     paintImage.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP)); 
     canvas.drawBitmap(bitmap, 0, 0, paintImage); 

     return output; 
    }