Xamarin SyncFusion,裁剪图像未正确通过



我的目标是将在我的CropPage.xaml(其中包含SfImageEditor(中编辑的裁剪的图像传递给另一个类。

以下是CropPage.xaml文件的代码:

<SyncFusion:SfImageEditor x:Name="imgEditor"
ImageSaved="imgEditor_ImageSaved">
</SyncFusion:SfImageEditor>

现在我已经编辑了SfImageEditor页面顶部的默认工具栏;继续";作为可点击的,所有这些都在CropPage.xaml.cs中。当然还有很多代码,但这是我认为重要的主要部分:

// Assign function when a selection occurs.
imgEditor.ToolbarSettings.ToolbarItemSelected += ToolbarSettings_ToolbarItemSelected;
private void ToolbarSettings_ToolbarItemSelected(object sender, ToolbarItemSelectedEventArgs e)
{
// When the user is ready to move on, they press continue to move to the next page. Check specifically for that.
if(e.ToolbarItem.Text == "Continue")
{
// Get the image and transfer it to the next page here. (Is it really just the source?)
Navigation.PushAsync(new ProcessPage(imgEditor.Source));
}
}

当然,ProcessPage只是另一个类,它的构造函数RECEIVE the ImageSource。重要的代码是:

// CropPage will pass on the image source when the user is done cropping, and image will be used for the algorithm.
ImageSource m_savedImgSrc;
public ProcessPage(ImageSource imgSource)
{
// Get rid of the navigation bar.
NavigationPage.SetHasNavigationBar(this, false);
InitializeComponent();
// Place image on screen.
imgSpace.Source = imgSource;
}

";imgSpace";上面只是一个小区域,用来显示将被裁剪的图像,xaml文件中的代码看起来像:

<Image x:Name="imgSpace"
AbsoluteLayout.LayoutBounds="0.5, 0.3, 0.9, 0.65"
AbsoluteLayout.LayoutFlags="All">
</Image>

所以这个计划很简单,我在CropPage中使用SfImageEditor裁剪一个图像,并将其传递给ProcessPage进行显示。但无论我如何裁剪,它都会进入ProcessPage,并显示原始图像。

我想我确实假设,当我在CropPage中裁剪图像时,显示的新图像在源中,所以如您所见,传递源将解决我的问题。但不幸的是,事实并非如此。

我一定缺少了一些东西来解释为什么我没有得到我想要的裁剪图像。非常感谢您的帮助!

检查了您的需求和共享代码,但您无法从ImageEditor.Source属性获取编辑后的图像,因为它只包含在图像编辑器中添加的原始ImageSource。

但是,您可以根据下面的代码片段从图像编辑器的ImageSaving事件中获得编辑后的图像流

<imageeditor:SfImageEditor Source="{Binding Image}"  x:Name="editor" ImageSaving="imgEditor_ImageSaving"/>

编辑完成后,单击Continue工具栏按钮并传递编辑后的图像源。

private void ToolbarSettings_ToolbarItemSelected(object sender, ToolbarItemSelectedEventArgs e)
{
if (e.ToolbarItem.Text == "Continue")
{
// Call editor save method.
editor.Save();
}
}

private void imgEditor_ImageSaving(object sender, ImageSavingEventArgs args)
{
// Below line will stop the image saving to your machine. If you like to save the image in your machine, you can remove the below line.
args.Cancel = true;
//args.Stream contain edited image stream
var stream = args.Stream;
//Convert the edited stream to ImageSource
var source = ImageSource.FromStream(() => stream);
// Pass edited image source to the next page
Navigation.PushAsync(new ProcessPage(source));
}

相关内容

  • 没有找到相关文章

最新更新