【问题标题】:How to persist an Image with size, location, and rotation and then restore it?如何保存具有大小、位置和旋转的图像然后恢复它?
【发布时间】:2017-04-22 01:27:39
【问题描述】:

在 WPF 中,我有一个图像被拖放到 InkCanvas 上并作为子元素添加:

    ImageInfo image_Info = e.Data.GetData(typeof(ImageInfo)) as ImageInfo;
        if (image_Info != null)
        {
            Image image = new Image();
            image.Width = image_Info.Width * 4;
            image.Stretch = Stretch.Uniform;
            image.Source = new BitmapImage(image_Info.Uri);
            Point position = e.GetPosition(ic);

            InkCanvas.SetLeft(image, position.X);
            InkCanvas.SetTop(image, position.Y);
            ic.Children.Add(image);
     }

然后通过装饰器,图像被移动和调整大小。然后将其持久化到数据库中:

 public List<string> Children;

 var uiList = ic.Children.Cast<UIElement>().ToList();
            foreach (var p in uiList)
            {
                string uis = System.Windows.Markup.XamlWriter.Save(p);
                s.Add(uis);
            }
            Children = s;

然后将孩子发送到数据库。数据库中的结果记录显示为:

"<Image Source="pack://application:,,,/Images/Female - Front.png" Stretch="Uniform" Width="Auto" InkCanvas.Top="296" InkCanvas.Left="695" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" /> "

没有对图像的新位置、大小或旋转的引用——只有它的初始放置点。使用 xmlreader 重新创建图像会将图像恢复到其初始放置点和大小。

foreach (string s in behavior.Children)
            {
                var stringReader = new StringReader(s);
                var xmlReader = System.Xml.XmlReader.Create(stringReader, new System.Xml.XmlReaderSettings());

                Image b = (Image)System.Windows.Markup.XamlReader.Load(xmlReader);
                ic.Children.Add(b);
            }

(图片源打包为应用资源)。

如何保存图像及其大小、位置和旋转然后恢复它?

TIA。

【问题讨论】:

  • 您根本不应该序列化和反序列化 XAML。更好地创建一个适当的模型类,其中包含描述当前视图的所有必要数据。然后加载并保存该模型类的实例。

标签: wpf image xaml xamlwriter


【解决方案1】:
  1. 您可以在数据库表中添加其他字段以获取大小/位置/旋转并在其中存储信息。

  2. 或者,您可以将这些字段以逗号(,) 分隔并存储在Image 控件的Tag 字段中。 &lt;Image Tag="(120,230);(50,50);(-30)" ... /&gt;

您还可以将整个处理后的图像保存为数据库中的byte[]

请说明这是否解决了您手头的问题。

【讨论】:

  • 事实证明,一旦删除了装饰器,上面的代码就可以正常工作。但是,我真的很喜欢您将附加信息作为字符串存储在标签中的想法。我相信 xamlwriter 将正确写入字符串数据以进行持久性,这将允许在前端和数据库之间进行图像识别。好主意。谢谢。
猜你喜欢
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
相关资源
最近更新 更多