برش( Crop ) عکس و نمایش آن به شکل دایره ای
باسلام خدمت استاد گرامی:
قصد نوشتن برنامه ای رو دارم که از گالری گوشی کاربر، عکس دریافت میکنه و بعداز برش عکس با ضلع برابر(عکس پروفایل) در یک قاب دایره ای تصویر را به نمایش در بیاورده.

بنده تخصص بالای در زمینه برنامه نویسی و اعمال کد های آماده ندارم. لطفا کمکم کنید..
منابع جستجو شده:
http://stackoverflow.com/questions/11932805/cropping-circular-area-from-bitmap-in-android
http://stackoverflow.com/questions/18641362/how-to-create-a-circle-clippath-from-an-image
مطلب قدیمی شده و تا الآن حتما حل شده ، ولی چند نکته :
یک راه برای اینکه هر شکلی بخواید در بیارید استفاده از Mask هست. برای شبیه سازیش میتونید 2 تا عکس را روی هم بگذارید که عکس بالایی دارای یک محوطه خالی (شفاف) میباشد و عکس پایین همان عکس معمولی است. با این ترفند هم دایره هم ستاره و هر شکل دیگه ای را میشه تولید کرد
<FrameLayout>
<ImageView /> put a image which has a transparent circle in it
<ImageView /> your image
</FrameLayout>
و سورس کامل :
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:foreground="@drawable/overlay" android:foregroundGravity="center" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/avatar" /> </FrameLayout> </FrameLayout>
خوبی این روش اینه که هیچ پردازش و کدی نداره و سمت xml کار انجام میشه
واین هم سورس برای تبدیل :
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;
/**
* A Drawable that draws an oval with given {@link Bitmap}
*/
public class RoundedAvatarDrawable extends Drawable {
private final Bitmap mBitmap;
private final Paint mPaint;
private final RectF mRectF;
private final int mBitmapWidth;
private final int mBitmapHeight;
public RoundedAvatarDrawable(Bitmap bitmap) {
mBitmap = bitmap;
mRectF = new RectF();
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
final BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mPaint.setShader(shader);
// NOTE: we assume bitmap is properly scaled to current density
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);
}
@Override
public void setAlpha(int alpha) {
if (mPaint.getAlpha() != alpha) {
mPaint.setAlpha(alpha);
invalidateSelf();
}
}
@Override
public void setColorFilter(ColorFilter cf) {
mPaint.setColorFilter(cf);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
public int getIntrinsicWidth() {
return mBitmapWidth;
}
@Override
public int getIntrinsicHeight() {
return mBitmapHeight;
}
public void setAntiAlias(boolean aa) {
mPaint.setAntiAlias(aa);
invalidateSelf();
}
@Override
public void setFilterBitmap(boolean filter) {
mPaint.setFilterBitmap(filter);
invalidateSelf();
}
@Override
public void setDither(boolean dither) {
mPaint.setDither(dither);
invalidateSelf();
}
public Bitmap getBitmap() {
return mBitmap;
}
// TODO allow set and use target density, mutate, constant state, changing configurations, etc.
یک راه دیگه استفاده از webView برای قرار دادن تصاویر و استفاده از svg درون آن است که بکگراند را عکس قرار میدهیم و خودش دایره ای شکل باشد.
از طریق css هم میتوانیم عکس را به صورت دایره ای نمایش دهیم و در وب ویو نشان دهیم
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .