Kann jemand ein Bild \ Bitmap zu einem Kreis zuschneiden? Ich kann keine Lösung finden, sorry ..Crop Bild als Kreis in Android
Antwort
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;
}
Nicht funktioniert. Bitte schlage mich vor. – Arun
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" />
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 zeichnetCanvas.drawRoundRect()
verwenden. Der Trick ist , einPaint
mit einemBitmapShader
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);
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
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
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
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;
}
@ user1281750 genau Frage ausführlich lesen! Es ist kein Duplikat wie! –
mögliches Duplikat von [Ausschnittsfläche aus Bitmap in Android beschneiden] (http://stackoverflow.com/questions/11932805/croping-circular-area-from-bitmap-in-android) – Adinia