public MainPage() { InitializeComponent(); assembly = GetType().GetTypeInfo().Assembly; this.BindingContext = this; var display = DeviceDisplay.MainDisplayInfo; Config = new ImageEditorConfig(backgroundType: BackgroundType.StretchedImage, outImageHeight: (int)display.Height, outImageWidht: (int)display.Width, aspect: BBAspect.Auto); }
internal ImageEditorPage(SKBitmap bitmap, ImageEditorConfig config) { InitializeComponent(); viewModel = new ImageEditorViewModel(bitmap, config); this.BindingContext = viewModel; canvasCropViewHost.Children.Add(viewModel.cropperCanvas, 0, 0); canvasMainViewHost.Children.Add(viewModel.mainCanvas, 0, 0); viewModel.PropertyChanged += ViewModel_PropertyChanged; }
public TouchManipulationCanvasView(ImageEditorConfig config) { this.config = config; if (!config?.IsOutImageAutoSize ?? false) { outImageWidht = config?.OutImageWidht ?? 0; outImageHeight = config?.OutImageHeight ?? 0; } rectInfo = new SKRect(0, 0, CanvasSize.Width, CanvasSize.Height); }
internal ImageEditorViewModel(SKBitmap bitmap, ImageEditorConfig config) { Config = config; cropperCanvas = new ImageCropperCanvasView(bitmap, config.CropAspectRatio); mainCanvas = new TouchManipulationCanvasView(config); mainCanvas.AddBitmapToCanvas(bitmap.Copy(), BitmapType.Main); mainCanvas.TextBitmapClicked += MainCanvas_TextBitmapClicked; mainCanvas.TrashEnabled += MainCanvas_TrashVisebled; ColorCollect = SkiaHelper.GetColors(); CropCollect = CropItem.GetCropItems(config.CanChangeCropAspectRatio); Message = config?.LoadingText; }
internal ImageEditorViewModel(SKBitmap bitmap, ImageEditorConfig config) { Config = config; cropperCanvas = new ImageCropperCanvasView(bitmap, config.CropAspectRatio); mainCanvas = new TouchManipulationCanvasView(config); mainCanvas.AddBitmapToCanvas(bitmap.Copy(), BitmapType.Main); mainCanvas.TextBitmapClicked += MainCanvas_TextBitmapClicked; mainCanvas.TrashEnabled += MainCanvas_TrashVisebled; ColorCollect = SkiaHelper.GetColors(); CropCollect = CropItem.GetCropItems(config.CanChangeCropAspectRatio); Message = config?.LoadingText; MessagingCenter.Subscribe <Xamarin.Forms.Application>(this, "BBDroidBackButton", (sender) => OnBackPressed()); }
protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { config = null; bitmapDictionary = null; inProgressPaths?.Clear(); inProgressPaths = null; TrashEnabled = null; TextBitmapClicked = null; } backgroundBitmap?.Dispose(); backgroundBitmap = null; mainBitmap?.Bitmap.Dispose(); if (mainBitmap != null) { mainBitmap.Bitmap = null; } backgroundBitmap = null; mainBitmap = null; foreach (var a in completedPaths) { a.Dispose(); } completedPaths?.Clear(); completedPaths = null; foreach (var a in bitmapCollection) { if (a.Type != BitmapType.Stickers) { a.Bitmap?.Dispose(); } a.Bitmap = null; } bitmapCollection = null; disposedValue = true; } }
internal ImageEditorPage(SKBitmap bitmap, ImageEditorConfig config) { try { InitializeComponent(); viewModel = new ImageEditorViewModel(bitmap, config); this.BindingContext = viewModel; //裁切画布 canvasCropViewHost.Children.Add(viewModel.cropperCanvas, 0, 0); //主图预览画布 canvasMainViewHost.Children.Add(viewModel.mainCanvas, 0, 0); viewModel.PropertyChanged += ViewModel_PropertyChanged; } catch (Exception ex) { System.Diagnostics.Debug.Print(ex.Message); } }
public MyInfoPageViewModel(INavigationService navigationService, IUserService userService, IPermissionsService permissionsService, IDialogService dialogService ) : base(navigationService, dialogService) { _userService = userService; _permissionsService = permissionsService; Title = "个人信息"; httpClientHelper = new HttpClientHelper(); this.Load = ReactiveCommand.CreateFromTask(() => Task.Run(() => { try { UserProfile = new UserAuthenticationModel() { Username = Settings.UserRealName, UserRealName = Settings.UserRealName, FaceImage = "profile_placeholder.png", Email = Settings.UserEmall, MobileNumber = Settings.UserMobile, StoreId = Settings.StoreId, StoreName = Settings.StoreName, DealerNumber = Settings.DealerNumber, MarketingCenter = Settings.MarketingCenter, MarketingCenterCode = Settings.MarketingCenterCode, SalesArea = Settings.SalesArea, SalesAreaCode = Settings.SalesAreaCode, BusinessDepartment = Settings.BusinessDepartment, BusinessDepartmentCode = Settings.BusinessDepartmentCode }; if (!string.IsNullOrEmpty(Settings.FaceImage) && Settings.FaceImage.StartsWith("http")) { //ImageSource.FromUri(new Uri(Settings.FaceImage)); UserFace = Settings.FaceImage; } } catch (Exception) { } })); //选择照片 this.UpdateFaceCommand = ReactiveCommand.CreateFromTask <string>(async(e) => { await this.NavigateAsync("CameraViewPage", ("TakeType", "UpdateFace")); }); this.BindBusyCommand(Load); MessageBus .Current .Listen <byte[]?>(string.Format(Constants.CAMERA_KEY, "UpdateFace")) .Subscribe(async bit => { try { if (bit != null && bit.Length > 0) { var stream = new MemoryStream(bit); //编辑照片 var display = DeviceDisplay.MainDisplayInfo; var config = new ImageEditorConfig( canAddText: false, canFingerPaint: false, backgroundType: BackgroundType.StretchedImage, outImageHeight: (int)display.Height, outImageWidht: (int)display.Width, aspect: BBAspect.Auto); using (var bitmap = SKBitmap.Decode(stream)) { byte[] data = await ImageEditor.Instance.GetEditedImage(bitmap, config); var resultStream = new MemoryStream(data); UploadPhotograph(resultStream); } } } catch (Exception ex) { Debug.Print(ex.StackTrace); _dialogService.LongAlert("服务器错误,编辑失败!"); } }).DisposeWith(DeactivateWith); }
internal static void DrawBackground(this SKCanvas canvas, SKBitmap bitmap, SKRect rect, ImageEditorConfig config) { using (SKPaint paint = new SKPaint()) { paint.IsAntialias = true; if (config?.BackgroundType != BackgroundType.Transparent) { paint.Color = config?.BackgroundType == BackgroundType.Color ? config.BackgroundColor : 0xFF1f1f1f; paint.Style = SKPaintStyle.Fill; canvas.DrawRect(rect, paint); } if (BackgroundType.StretchedImage == config?.BackgroundType) { canvas.DrawBitmap(bitmap, rect, paint); } } }