MR.B4A 270 ارسال شده در 17 آذر اشتراک گذاری ارسال شده در 17 آذر 🔥 یک قابلیت کاربردی برای پروژههای B4A! 📸 تا حالا خواستی داخل برنامهی Basic4Android به کاربر اجازه بدی یک عکس را انتخاب کنه و خودش قسمت موردنظر تصویر را دقیق برش بده؟ دیگه لازم نیست این قابلیت رو از صفر پیادهسازی کنی! 😎 🚀 سورس آماده برش عکس در B4A این سورس دارای یک ماژول آماده است و استفاده از آن بسیار ساده است. ✅ انتخاب تصویر ✅ برش دقیق عکس ✅ رابط کاربری آماده برای Crop ✅ ذخیره تصویر برشخورده در گوشی ✅ قابل استفاده در پروژههای مختلف B4A 💡 فقط سورس را به پروژه اضافه کن، ماژول را وارد کن و از قابلیت برش تصویر استفاده کن! 📥 اگر با B4A کار میکنی، این سورس میتونه یکی از ابزارهای کاربردی پروژههات باشه. سورس ابتدا این ماژول را به پروژت اضافه کن #DesignerProperty: Key: SelectionColor, DisplayName: Selection Color, FieldType: Color, DefaultValue: 0xFF0066FF #Event: CropCompleted Sub Class_Globals Private mEventName As String 'ignore Private mCallBack As Object 'ignore Private mBase As B4XView 'ignore Private xui As XUI 'ignore Private ImageView As B4XView Private ColorBC, GreyBC, TargetBC As BitmapCreator Private OriginalBmp As B4XBitmap Private SelectionRect As B4XRect Private pnl As B4XView Private sx, sy As Int Private clr As Int Private OffsetX, OffsetY As Int End Sub Public Sub Initialize (Callback As Object, EventName As String) mEventName = EventName mCallBack = Callback SelectionRect.Initialize(0, 0, 0, 0) End Sub 'Base type must be Object Public Sub DesignerCreateView (Base As Object, Lbl As Label, Props As Map) mBase = Base clr = xui.PaintOrColorToColor(Props.Get("SelectionColor")) Dim iv As ImageView iv.Initialize("") ImageView = iv mBase.AddView(ImageView, 0, 0, 0, 0) pnl = xui.CreatePanel("pnl") mBase.AddView(pnl, 0, 0, 0, 0) Base_Resize(mBase.Width, mBase.Height) End Sub Private Sub Base_Resize (Width As Double, Height As Double) pnl.SetLayoutAnimated(0, 0, 0, Width, Height) End Sub Private Sub pnl_Touch (Action As Int, X As Float, Y As Float) x = (x - OffsetX)/ xui.Scale y = (y - OffsetY) / xui.Scale x = Max(0, Min(ColorBC.mWidth - 1, X)) y = Max(0, Min(ColorBC.mHeight - 1, Y)) Select Action Case pnl.TOUCH_ACTION_DOWN SelectionRect.Left = 0 SelectionRect.Top = 0 SelectionRect.Right = 0 SelectionRect.Bottom = 0 sx = X sy = Y Case pnl.TOUCH_ACTION_MOVE SelectionRect.Left = Min(sx, X) SelectionRect.Top = Min(sy, Y) SelectionRect.Right = Max(sx, X) SelectionRect.Bottom = Max(sy, Y) Case pnl.TOUCH_ACTION_UP If IsValidSelection Then CallSubDelayed(mCallBack, mEventName & "_CropCompleted") End If End Select UpdateTarget End Sub Public Sub SetBitmap (bmp As B4XBitmap) OriginalBmp = bmp Dim FitBitmap As B4XBitmap = bmp.Resize(pnl.Width, pnl.Height, True) OffsetX = (pnl.Width - FitBitmap.Width) / 2 OffsetY = (pnl.Height - FitBitmap.Height) / 2 ImageView.SetLayoutAnimated(0, OffsetX, OffsetY, FitBitmap.Width, FitBitmap.Height) ColorBC.Initialize(FitBitmap.Width / FitBitmap.Scale, FitBitmap.Height / FitBitmap.Scale) ColorBC.CopyPixelsFromBitmap(FitBitmap) GreyBC.Initialize(ColorBC.mWidth, ColorBC.mHeight) TargetBC.Initialize(ColorBC.mWidth, ColorBC.mHeight) 'greyscale Dim argb As ARGBColor For x = 0 To ColorBC.mWidth - 1 For y = 0 To ColorBC.mHeight - 1 ColorBC.GetARGB(x, y, argb) Dim c As Int = argb.r * 0.21 + argb.g * 0.72 + 0.07 * argb.b argb.r = c argb.g = c argb.b = c GreyBC.SetARGB(x, y, argb) Next Next UpdateTarget End Sub Private Sub UpdateTarget TargetBC.DrawBitmapCreator(GreyBC, GreyBC.TargetRect, 0, 0, True) TargetBC.DrawBitmapCreator(ColorBC, SelectionRect, SelectionRect.Left, SelectionRect.Top, True) DrawRect ImageView.SetBitmap(TargetBC.Bitmap) End Sub Private Sub DrawRect 'no bounds checks Dim a As ARGBColor TargetBC.ColorToARGB(clr, a) For y = SelectionRect.Top To SelectionRect.Bottom - 1 TargetBC.SetARGB(SelectionRect.Left, y, a) TargetBC.SetARGB(SelectionRect.Right - 1, y, a) Next For x = SelectionRect.Left To SelectionRect.Right - 1 TargetBC.SetARGB(x, SelectionRect.Top, a) TargetBC.SetARGB(x, SelectionRect.Bottom - 1, a) Next End Sub Public Sub IsValidSelection As Boolean Return SelectionRect.Width > 5 And SelectionRect.Height > 5 End Sub Public Sub GetCroppedBitmap As B4XBitmap Dim fx As Float = OriginalBmp.Width / TargetBC.mWidth Dim fy As Float = OriginalBmp.Height / TargetBC.mHeight Return OriginalBmp.Crop(SelectionRect.Left * fx, SelectionRect.Top * fy, SelectionRect.Width * fx, SelectionRect.Height * fy) End Sub سپس در اکتیویتی اصلی این کدها را بنویسید Sub Globals Private CropView1 As CropView Private xui As XUI Private run As RuntimePermissions Private out As OutputStream Private ImageView1 As ImageView Private Label2 As Label Private ImageView3 As ImageView Private ImageView2 As ImageView End Sub Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("1") End Sub Sub CropView1_CropCompleted ImageView2.SetBackgroundImage(CropView1.GetCroppedBitmap) End Sub 'وقتی برش عکس کامل میشه، این ساب اجرا میشه و برش در یک ایمیج ویو قرار میگیره Sub Activity_Resume End Sub Sub Activity_Pause (UserClosed As Boolean) End Sub Private Sub btn_save_Click out = File.OpenOutput(run.GetSafeDirDefaultExternal(""),DateTime.Now&".png",False) Dim bit1 As Bitmap bit1.Initialize3(ImageView1.Bitmap) bit1.WriteToStream(out,100,"PNG") out.Close ToastMessageShow("تصویر ذخیره شد",False) End Sub 'ذخیره تصویر برش خورده در این بخش انجام میشه 'تصویر در پوشه امن اندروید ذخیره میشه 'در سورس های قبلی آموزش دادم که چگونه عکس رو در مثلا پوشه دانلود اندروید ذخیره کنید Private Sub Button1_Click ImageView3.Visible=False CropView1.SetBitmap(xui.LoadBitmap(File.DirAssets, "pic.png")) Label2.Visible=True MsgboxAsync("تصویر پیشفرض انتخاب شد","") End Sub 'در این ساب عکس اصلی حهت برش انتخاب میشه نا ماژول را CropView بگذارید. طراح و نویسنده مرتضی صباغی MR.B4A https://eitaa.com/basic4androidlan https://t.me/programmingwithb4a 1 نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
ارسالهای توصیه شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .
توجه: strong> مطلب ارسالی شما پس از تایید مدیریت برای همه قابل رویت خواهد بود.