如何持久化具有大小、位置和旋转的图像,然后恢复它?
How to persist an Image with size, location, and rotation and then restore it?
在 WPF 中,我有一个图像被拖放到 InkCanvas 上并添加为 child:
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;
Children 然后被发送到数据库。数据库中的结果记录显示为:
"<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。
您可以将其他字段添加到您的数据库 Table 以获取大小/位置/旋转并在那里存储信息。
或者,您可以将这些字段以逗号 (,) 分隔并存储在 Image
控件的 Tag
字段中。 <Image Tag="(120,230);(50,50);(-30)" ... />
您还可以将整个处理后的图像保存为数据库中的 byte[]
。
请告诉我这是否解决了您手头的问题。
在 WPF 中,我有一个图像被拖放到 InkCanvas 上并添加为 child:
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;
Children 然后被发送到数据库。数据库中的结果记录显示为:
"<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。
您可以将其他字段添加到您的数据库 Table 以获取大小/位置/旋转并在那里存储信息。
或者,您可以将这些字段以逗号 (,) 分隔并存储在
Image
控件的Tag
字段中。<Image Tag="(120,230);(50,50);(-30)" ... />
您还可以将整个处理后的图像保存为数据库中的 byte[]
。
请告诉我这是否解决了您手头的问题。