NullReferenceException in CropingRectangle.TouchBegin

I'm using this control to force user cropping image in square aspect ratio before uploading image to our server.
To do this first set all toolbar items invisible with the following method.
ImageEditor.SetToolbarItemVisibility("Text,Add,TextColor,FontFamily,Arial,Noteworthy,... ,  false);

Then set the source property of image editor:
ImageEditor.Source = ImageSource.FromStream(() => new MemoryStream(bytes));

Then on ImageLoaded event handler call this:
ImageEditor.ToggleCropping(1,1);

After user selects cropping area and pressed Crop button, the following code executes:
ImageEditor.Crop();
ImageEditor.ToggleCropping();

At this point, the header toolbar items (save, undo) will appear and the image will be properly cropped.

Now if the user touch on image we have the following exception: ( Stacktrace copied from hockeyapp)

CropingRectangle.TouchBegin 
android.runtime.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object 

Xamarin caused by: android.runtime.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object
Syncfusion.SfImageEditor.Android.CropingRectangle.TouchBegin(PointExt location)<7ad165d3dc074dfa8e99b8eae466a084>:0
Syncfusion.SfImageEditor.Android.CropingRectangle.OnTouchEvent(MotionEvent e)<7ad165d3dc074dfa8e99b8eae466a084>:0
Android.Views.View.n_OnTouchEvent_Landroid_view_MotionEvent_(IntPtr jnienv, IntPtr native__this, IntPtr native_e)<37d9e926f4d74728b29f22192d91a60d>:0
at (wrapper dynamic-method) System.Object.f312c808-6282-4695-8e57-6a1da602c7f4(intptr,intptr,intptr)
md5ee0b1c9c85cf2a7f14d638a8c0aa5d0f.CropingRectangle.n_onTouchEvent(Native Method)
md5ee0b1c9c85cf2a7f14d638a8c0aa5d0f.CropingRectangle.onTouchEvent()CropingRectangle.java:47
android.view.View.dispatchTouchEvent()View.java:9302
android.view.ViewGroup.dispatchTransformedTouchEvent()ViewGroup.java:2576
android.view.ViewGroup.dispatchTouchEvent()ViewGroup.java:2198
android.view.ViewGroup.dispatchTransformedTouchEvent()ViewGroup.java:2554
android.view.ViewGroup.dispatchTouchEvent()ViewGroup.java:2198
md51558244f76c53b6aeda52c8a337f2c37.VisualElementRenderer_1.n_dispatchTouchEvent(Native Method)
md51558244f76c53b6aeda52c8a337f2c37.VisualElementRenderer_1.dispatchTouchEvent()VisualElementRenderer_1.java:64
android.view.ViewGroup.dispatchTransformedTouchEvent()ViewGroup.java:2554
android.view.ViewGroup.dispatchTouchEvent()ViewGroup.java:2198
md5b5cbf9a5f989abac95309328170a059b.PopupPageRenderer.n_dispatchTouchEvent(Native Method)
md5b5cbf9a5f989abac95309328170a059b.PopupPageRenderer.dispatchTouchEvent()PopupPageRenderer.java:82
android.view.ViewGroup.dispatchTransformedTouchEvent()ViewGroup.java:2554
android.view.ViewGroup.dispatchTouchEvent()ViewGroup.java:2198
com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent()PhoneWindow.java:2403
com.android.internal.policy.PhoneWindow.superDispatchTouchEvent()PhoneWindow.java:1737
android.app.Activity.dispatchTouchEvent()Activity.java:2843
md54045cd0ebe1c35dc2558553a65861a6c.MainActivity.n_dispatchTouchEvent(Native Method)
md54045cd0ebe1c35dc2558553a65861a6c.MainActivity.dispatchTouchEvent()MainActivity.java:42
android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent()WindowCallbackWrapper.java:68
android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent()WindowCallbackWrapper.java:68
com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent()PhoneWindow.java:2364
android.view.View.dispatchPointerEvent()View.java:9522
android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent()ViewRootImpl.java:4248
android.view.ViewRootImpl$ViewPostImeInputStage.onProcess()ViewRootImpl.java:4101
android.view.ViewRootImpl$InputStage.deliver()ViewRootImpl.java:3647
android.view.ViewRootImpl$InputStage.onDeliverToNext()ViewRootImpl.java:3700
android.view.ViewRootImpl$InputStage.forward()ViewRootImpl.java:3666
android.view.ViewRootImpl$AsyncInputStage.forward()ViewRootImpl.java:3792
android.view.ViewRootImpl$InputStage.apply()ViewRootImpl.java:3674
android.view.ViewRootImpl$AsyncInputStage.apply()ViewRootImpl.java:3849
android.view.ViewRootImpl$InputStage.deliver()ViewRootImpl.java:3647
android.view.ViewRootImpl$InputStage.onDeliverToNext()ViewRootImpl.java:3700
android.view.ViewRootImpl$InputStage.forward()ViewRootImpl.java:3666
android.view.ViewRootImpl$InputStage.apply()ViewRootImpl.java:3674
android.view.ViewRootImpl$InputStage.deliver()ViewRootImpl.java:3647
android.view.ViewRootImpl.deliverInputEvent()ViewRootImpl.java:5944
android.view.ViewRootImpl.doProcessInputEvents()ViewRootImpl.java:5918
android.view.ViewRootImpl.enqueueInputEvent()ViewRootImpl.java:5879
android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent()ViewRootImpl.java:6047
android.view.InputEventReceiver.dispatchInputEvent()InputEventReceiver.java:185
android.os.MessageQueue.nativePollOnce(Native Method)
android.os.MessageQueue.next()MessageQueue.java:323
android.os.Looper.loop()Looper.java:135
android.app.ActivityThread.main()ActivityThread.java:5484
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run()ZygoteInit.java:726
com.android.internal.os.ZygoteInit.main()ZygoteInit.java:616


1 Reply

MP Michael Prabhu M Syncfusion Team August 13, 2018 06:14 AM UTC

Hi Armin, 
 
Greetings from Syncfusion, we have analyzed the reported issue and found this is caused because the ImageLoaded event is called twice (one during loading and the other after cropping which is an issue) and to overcome this issue please follow the below code snippet as a workaround. 
 
Code Snippet C# 
bool imageEditorLoaded;

void Editor_ImageLoaded(object sender, ImageLoadedEventArgs args)
{
   if (!imageEditorLoaded)
   {
      editor.ToggleCropping(1, 1);
      imageEditorLoaded = true;
   }
}

void Crop_Selected(object sender, System.EventArgs e)
{
   editor.Crop();
   // editor.ToggleCropping(); // No need to call this. 
} 
 
 
  
Meanwhile we will fix this issue in our Volume 2 SP 2 release which is scheduled to be rolled out at the end of August 2018. We appreciate your patience until then. 
 
Thanks, 
Michael 




Loader.
Up arrow icon