آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

برش( Crop ) عکس و نمایش آن به شکل دایره ای

iSheykhi  12 سال پیش  11 سال پیش
+9 0

باسلام خدمت استاد گرامی:

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

بنده تخصص بالای در زمینه برنامه نویسی و اعمال کد های آماده ندارم. لطفا کمکم کنید..

منابع جستجو شده:

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

 

 

0 0
راستش کسی حسشو نداره تست کن ! ، خودت لینک رو پیدا کردی تست کن دیگه ، مطمئنا stack که تیک خورده و رای مثبت گرفته ، نشد نداره ! (12 سال پیش)
+1 0
شما یک Custom Control مثل آموزش باران بساز و تو قسمت onDraw کد موجود در لینک دومی که پیدا کردید رو بنویسید. اگر مشکل حل نشد اطلاع بدید تا به عنوان یک بخش تدوین کنم. (12 سال پیش)
0 0
دقیقا نمی دونم به کدوم بخش اشاره دارید از اونجایی که سوال دیگران هم هست ممنون می شم توضیح بدین (12 سال پیش)
+1 0
در آموزشهای «کنترل های سفارشی» مخصوصاً «باران» در این خصوص آموزشهایی ارائه شده که کاملاً خواسته شما را برآورده می کند. در واقع ترسیم بر روی Canvas است. (12 سال پیش)
0 0
iSheykhi من دیدم شما داخل برنامه ی جدیدتون از این قابلیت استفاده کردین.پس لطف کنین روش کارتون اینجا بزارین تا همه بچه ها ببینن (12 سال پیش)
0 0
شما مشکلتون حل شد ؟میشه توضیح بدید چطور ؟ (11 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
MiRHaDi  12 سال پیش
+10 0

مطلب قدیمی شده و تا الآن حتما حل شده ، ولی چند نکته :

یک راه برای اینکه هر شکلی بخواید در بیارید استفاده از 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 کار انجام میشه

0 0
در این کد overly چه شکلی هست ؟ (12 سال پیش)
0 0
این کد شما خیلی خوبه اما یک مشکلی هست و اون این که هرچی که رنگ زمینه باشه باید اون ماسک هم به همون رنگ باشه و اگر رنگ زمینه متفاوت باشه با رنگ ماسک ، تابلو میشه (12 سال پیش)
پاسخ به سوال 
MiRHaDi  12 سال پیش
+5 0

واین هم سورس برای تبدیل :

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.
0 0
این کد دقیقا چیکار میکنه ؟ (12 سال پیش)
پاسخ به سوال 
MiRHaDi  11 سال پیش
0 0

یک راه دیگه استفاده از webView برای قرار دادن تصاویر و استفاده از svg درون آن است که بکگراند را عکس قرار میدهیم و خودش دایره ای شکل باشد.

از طریق css هم میتوانیم عکس را به صورت دایره ای نمایش دهیم و در وب ویو نشان دهیم


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .