RasterImage序列化

介绍

二进制序列化

XML序列化

源于RasterImage和序列化

介绍

RasterImage接口和RasterImage类实现ISerializable标准接口,从而支持。net序列化。

序列化的过程是将对象的状态转化为一种形式,可以保存和运输。序列化反序列化的补充,它将流转换为对象。在一起,这些过程允许数据很容易存储和转移。

你可以很容易地保存和恢复的图像数据RasterImage对象通过保存/加载图像回图像格式支持的众多文件之一LEADTOOLS。然而,通过这样做,你不会丢失任何数据支持的图像文件格式。例如,目前该地区数据在图像是图像格式不支持的任何文件。元数据(标签、标记和注释)是由一些格式,但不是全部。

序列化保存一切解决了这些问题的形象,后来反序列化回到原来的状态。此外,当你获得你自己的类RasterImage,您可以扩展序列化机制来支持保存/恢复自己的数据在图像。

RasterImage同时支持二进制和XML序列化。

二进制序列化

您可以使用二进制序列化来分享RasterImage对象在不同应用程序之间通过序列化到剪贴板。你可以序列化RasterImage流,一个磁盘、内存、网络,等等。Remoting使用二进制序列化传递对象“价值”从一台计算机或应用程序域到另一个地方。

二进制序列化一个序列化是最有效的方法RasterImage对象的序列化/反序列化的速度和使用更少的空间对象的数据。

二进制序列化的例子:

VB
进口进口System.Runtime.Serialization.Formatters.Binary进口Leadtools进口Leadtools.Codecs私人BinarySerializationTest ()昏暗的编解码器作为RasterCodecs =RasterCodecs ()的加载一个形象昏暗的image1作为RasterImage = codecs.Load (“C: \ LEADTOOLS21 \资源\ \ Image1.cmp图像”)使用二进制格式化程序昏暗的格式化程序作为BinaryFormatter =BinaryFormatter ()“序列化这图像到内存流昏暗的味精ydF4y2Ba作为MemoryStream =MemoryStream ()格式化程序。image1序列化(女士)我们完成了图像image1.Dispose ()回到一开始的流ms.Position = 0“反序列化的形象昏暗的image2作为RasterImage =CType(如果(TypeOfformatter.Deserialize(女士)RasterImage formatter.Deserialize(女士),没有什么),RasterImage)“重新保存图像codecs.Save (image2“C: \ LEADTOOLS21 \资源\ \ Image1_Serialized.bmp图像”,RasterImageFormat。Bmp, 24)的清理image2.Dispose ()ms.Close ()codecs.Dispose ()结束
c#
使用先;使用System.Runtime.Serialization.Formatters.Binary;使用Leadtools;使用Leadtools.Codecs;私人无效BinarySerializationTest (){RasterCodecs编解码器=RasterCodecs ();/ /加载一个图像RasterImage image1 = codecs.Load (@“C: \ LEADTOOLS21 \资源\ \ Image1.cmp图像”);/ /使用二进制格式化程序BinaryFormatter格式化程序=BinaryFormatter ();/ /序列化这张照片到一个内存流MemoryStream女士=MemoryStream ();格式化程序。序列化(ms, image1);/ /已经完成的形象image1.Dispose ();/ /移动回到流的开始ms.Position = 0;/ /反序列化的形象RasterImage image2 = formatter.Deserialize(女士)作为RasterImage;/ /重新保存图像codecs.Save (image2@“C: \ LEADTOOLS21 \资源\ \ Image1_Serialized.bmp图像”,RasterImageFormat。Bmp、24);/ /清理image2.Dispose ();ms.Close ();codecs.Dispose ();}

XML序列化

您还可以使用序列化RasterImage对象到XML。因为XML是一种开放标准,共享一个XML序列化是一个有吸引力的选择RasterImage对象在网络上。

然而,由于XML是一种文本格式,XML序列化不推荐使用RasterImage对象。序列化/反序列化的速度远慢于二进制序列化和XML序列化对象数据使用更多的空间。

序列化的例子(使用Windows剪贴板)下面的例子显示了如何复制和粘贴RasterImage使用序列化对象到Windows剪贴板。这个示例假设您已经添加的代码形式和调用的方法中创建表单上的构造函数或其他方法的例子。

VB
进口系统进口System.Windows.Forms进口Leadtools进口Leadtools.Codecs进口Leadtools.WinForms私人panel1作为面板私人loadButton作为按钮私人clearButton作为按钮私人copyButton作为按钮私人pasteButton作为按钮私人rasterImageViewer1作为RasterImageViewer私人codecs1作为RasterCodecs私人ClipboardTest ()“将控件添加到表单“1。RasterImageViewer控制“2。按钮加载映像加载到查看器“3。清晰的按钮来重置观众的形象。“3。复制按钮将图像复制到剪贴板”4。从剪贴板粘贴按钮粘贴图像查看器“创建控件.SuspendLayout ()loadButton =按钮panel1 =面板panel1。码头= DockStyle.Leftpanel1。宽度= loadButton.Width.Controls.Add (panel1)loadButton。文本=“负载”loadButton。位置=点(0,0)panel1.Controls.Add (loadButton)loadButton.BringToFront ()AddHandlerloadButton.Click,AddressOfloadButton_ClickclearButton =按钮clearButton。文本=“明确”clearButton。位置=点(0,loadButton.Bottom)panel1.Controls.Add (clearButton)clearButton.BringToFront ()AddHandlerclearButton.Click,AddressOfclearButton_ClickcopyButton =按钮copyButton。文本=“复制”copyButton。位置=点(0,clearButton.Bottom)panel1.Controls.Add (copyButton)copyButton.BringToFront ()AddHandlercopyButton.Click,AddressOfcopyButton_ClickpasteButton =按钮pasteButton。文本=“粘贴”pasteButton。位置=点(0,copyButton.Bottom)panel1.Controls.Add (pasteButton)pasteButton.BringToFront ()AddHandlerpasteButton.Click,AddressOfpasteButton_ClickrasterImageViewer1 =RasterImageViewerrasterImageViewer1。码头= DockStyle.FillControls.Add (rasterImageViewer1)rasterImageViewer1.BringToFront ().ResumeLayout ()”编解码器对象初始化codecs1 =RasterCodecs更新我们的用户界面UpdateMyUserInterface ()结束私人UpdateMyUserInterface ()根据应用程序状态的更新按钮“Clear按钮启用如果我们有一个图像clearButton。启用= (rasterImageViewer1.Image没有什么)“复制按钮启用如果我们有一个图像copyButton。启用= (rasterImageViewer1.Image没有什么)“粘贴按钮启用如果我们有一个有效的剪贴板格式昏暗的数据作为IDataObject = Clipboard.GetDataObject ()pasteButton。启用= data.GetDataPresent (方法(RasterImage))结束私人loadButton_Click (按值传递发送方作为对象,按值传递e作为EventArgs)加载一个新的图像查看器昏暗的了解地理作为OpenFileDialog了解地理。过滤器=“所有文件| * *”。如果(dlg.ShowDialog ()= DialogResult.OK)然后试一试rasterImageViewer1.Image=codecs1。Load(dlg.FileName)前女友作为异常MessageBox.Show (ex.Message)最后更新用户界面UpdateMyUserInterface ()结束试一试结束如果结束私人clearButton_Click (按值传递发送方作为对象,按值传递e作为EventArgs)“删除的图像查看器rasterImageViewer1.Image=没有什么更新用户界面UpdateMyUserInterface ()结束私人copyButton_Click (按值传递发送方作为对象,按值传递e作为EventArgs)的图像查看器中的复制到剪贴板Clipboard.SetDataObject (rasterImageViewer1.Image真正的)更新用户界面UpdateMyUserInterface ()结束私人pasteButton_Click (按值传递发送方作为对象,按值传递e作为EventArgs)“将图像从剪贴板粘贴到查看器昏暗的数据作为IDataObject = Clipboard.GetDataObject ()rasterImageViewer1.Image=CType(data.GetData (方法(RasterImage)), RasterImage)更新用户界面UpdateMyUserInterface ()结束
c#
使用系统;使用System.Windows.Forms;使用Leadtools;使用Leadtools.Codecs;使用Leadtools.WinForms;私人面板panel1;私人按钮loadButton;私人按钮clearButton;私人按钮copyButton;私人按钮pasteButton;私人RasterImageViewer rasterImageViewer1;私人RasterCodecs codecs1;私人无效ClipboardTest (){/ /将控件添加到表单/ / 1。RasterImageViewer控制/ / 2。按钮加载映像加载到查看器/ / 3。清晰的按钮来重置观众的形象。/ / 3。复制按钮将图像复制到剪贴板/ / 4。从剪贴板粘贴按钮粘贴图像查看器/ /创建控件.SuspendLayout ();loadButton =按钮();panel1 =面板();panel1。码头= DockStyle.Left;panel1。宽度= loadButton.Width;.Controls.Add (panel1);loadButton。文本=“负载”;loadButton。位置=点(0,0);panel1.Controls.Add (loadButton);loadButton.BringToFront ();loadButton。单击+ =EventHandler (loadButton_Click);clearButton =按钮();clearButton。文本=“明确”;clearButton。位置=点(0,loadButton.Bottom);panel1.Controls.Add (clearButton);clearButton.BringToFront ();clearButton。单击+ =EventHandler (clearButton_Click);copyButton =按钮();copyButton。文本=“复制”;copyButton。位置=点(0,clearButton.Bottom);panel1.Controls.Add (copyButton);copyButton.BringToFront ();copyButton。单击+ =EventHandler (copyButton_Click);pasteButton =按钮();pasteButton。文本=“粘贴”;pasteButton。位置=点(0,copyButton.Bottom);panel1.Controls.Add (pasteButton);pasteButton.BringToFront ();pasteButton。单击+ =EventHandler (pasteButton_Click);rasterImageViewer1 =RasterImageViewer ();rasterImageViewer1。码头= DockStyle.Fill;Controls.Add (rasterImageViewer1);rasterImageViewer1.BringToFront ();.ResumeLayout ();/ /初始化对象编解码器codecs1 =RasterCodecs ();/ /更新用户界面UpdateMyUserInterface ();}私人无效UpdateMyUserInterface (){/ /更新按钮取决于应用程序状态/ /启用Clear按钮如果我们有一个图像clearButton。= rasterImageViewer1启用。形象! =;/ /复制按钮启用如果我们有一个图像copyButton。= rasterImageViewer1启用。形象! =;/ /粘贴按钮启用如果我们有一个有效的剪贴板格式IDataObject data = Clipboard.GetDataObject ();pasteButton。启用= data.GetDataPresent (typeof(RasterImage));}私人无效loadButton_Click (对象发送方的EventArgs e){/ /加载一个新的图像查看器OpenFileDialog dlg =OpenFileDialog ();了解地理。过滤器=“所有文件| * *”。;如果(dlg.ShowDialog ()= = DialogResult.OK){试一试{rasterImageViewer1.Image=codecs1。Load(dlg.FileName);}(异常交货){MessageBox.Show (,ex.Message);}最后{/ /更新用户界面UpdateMyUserInterface ();}}}私人无效clearButton_Click (对象发送方的EventArgs e){/ /删除的图像查看器rasterImageViewer1.Image=;/ /更新用户界面UpdateMyUserInterface ();}私人无效copyButton_Click (对象发送方的EventArgs e){/ /图像查看器中的复制到剪贴板Clipboard.SetDataObject (rasterImageViewer1.Image真正的);/ /更新用户界面UpdateMyUserInterface ();}私人无效pasteButton_Click (对象发送方的EventArgs e){/ /将图像从剪贴板粘贴到查看器IDataObject data = Clipboard.GetDataObject ();rasterImageViewer1.Image=数据。得到Data(typeof(RasterImage))作为RasterImage;/ /更新用户界面UpdateMyUserInterface ();}

源于RasterImage和序列化

RasterImage类可以从添加用户定义的功能。派生类可能需要添加新类成员变量来定义这个新功能的类。作者必须添加对序列化的支持这些新类成员变量为了参与序列化过程。

下面的例子展示了MyRasterImage,一个来自类RasterImage添加两个新的属性。

VB
进口进口System.Runtime.Serialization进口System.Runtime.Serialization.Formatters.Binary进口Leadtools进口Leadtools.Codecs公共MyRasterImage继承了RasterImage我们的新成员我们要做序列化私人_myIntegerData作为整数私人_myStringData作为字符串的访问器公共财产MyIntegerData ()作为整数得到返回_myIntegerData结束得到(按值传递价值作为整数)_myIntegerData =值结束结束财产公共财产MyStringData ()作为字符串得到返回_myStringData结束得到(按值传递价值作为字符串)_myStringData =值结束结束财产的构造函数公共(按值传递src作为RasterImage)MyBase(src)_myIntegerData = 0_myStringData =字符串空虚结束“序列化代码受保护的(按值传递信息作为SerializationInfo,按值传递上下文作为StreamingContext)MyBase(信息,上下文)“加载数据_myIntegerData = info.GetInt32 (“MyIntegerData”)_myStringData = info.GetString (“MyStringData”)结束公共覆盖GetObjectData (按值传递信息作为SerializationInfo,按值传递上下文作为StreamingContext)“总是调用基方法MyBase.GetObjectData(信息,上下文)“拯救我们的数据info.AddValue (“MyIntegerData”_myIntegerData)info.AddValue (“MyStringData”_myStringData)结束结束私人MyRasterImageTest ()的加载一个形象昏暗的编解码器作为RasterCodecs昏暗的img作为RasterImage = codecs.Load (“C: \ LEADTOOLS21 \资源\ \ Image1.cmp图像”)“创建一个新的MyRasterImage实例的形象昏暗的模板作为MyRasterImage =MyRasterImage (img)设置自定义的数据模板。MyIntegerData = 10模板。MyStringData =“我的字符串”昏暗的味精作为字符串=字符串.Format (“在序列化。MyIntegerData = {0}, MyStringData = {1} "模板。MyIntegerData myImage.MyStringData)MessageBox.Show(味精)“现在img是无效的,应该处理img.Dispose ()序列化的模板昏暗的格式化程序作为BinaryFormatter昏暗的味精ydF4y2Ba作为MemoryStream格式化程序。序列化(ms、模板)“处理模板myImage.Dispose ()myImage =没有什么“从流进行反序列化ms.Position = 0myImage =DirectCast(formatter.Deserialize(女士),MyRasterImage)味精=字符串.Format (“在序列化。MyIntegerData = {0}, MyStringData = {1} "模板。MyIntegerData myImage.MyStringData)MessageBox.Show(味精)的清理ms.Close ()myImage.Dispose ()codecs.Dispose ()结束
c#
使用先;使用System.Runtime.Serialization;使用System.Runtime.Serialization.Formatters.Binary;使用Leadtools;使用Leadtools.Codecs;(序列化)公共MyRasterImage: RasterImage{/ /我们的新成员/ /我们自己要做序列化(NonSerialized)私人int_myIntegerData;(NonSerialized)私人字符串_myStringData;/ /访问器公共intMyIntegerData{得到{返回_myIntegerData;}{_myIntegerData =价值;}}公共字符串MyStringData{得到{返回_myStringData;}{_myStringData =价值;}}/ /构造函数公共MyRasterImage (RasterImage src):基地(src){_myIntegerData = 0;_myStringData =字符串空虚;}/ /序列化代码受保护的MyRasterImage (SerializationInfo信息,StreamingContext上下文):基地(信息,上下文){/ /加载数据_myIntegerData = info.GetInt32 (“MyIntegerData”);_myStringData = info.GetString (“MyStringData”);}公共覆盖无效GetObjectData (SerializationInfo信息,StreamingContext上下文){/ /调用基方法基地.GetObjectData(信息,上下文);/ /保存数据info.AddValue (“MyIntegerData”,_myIntegerData);info.AddValue (“MyStringData”,_myStringData);}}私人无效MyRasterImageTest (){/ /加载一个图像RasterCodecs编解码器=RasterCodecs ();RasterImage img = codecs.Load (@“C: \ LEADTOOLS21 \资源\ \ Image1.cmp图像”);/ /创建一个新的MyRasterImage实例的形象MyRasterImage myImage =MyRasterImage (img);/ /设置自定义数据模板。MyIntegerData = 10;模板。MyStringData =“我的字符串”;字符串味精=字符串.Format (“在序列化。MyIntegerData = {0}, MyStringData = {1} "模板。MyIntegerData myImage.MyStringData);MessageBox.Show(味精);/ / img是无效的,应该处理img.Dispose ();/ /序列化模板BinaryFormatter格式化程序=BinaryFormatter ();MemoryStream女士=MemoryStream ();格式化程序。序列化(ms,模板);/ /处理模板myImage.Dispose ();myImage =;/ /反序列化流ms.Position = 0;myImage = formatter.Deserialize(女士)作为MyRasterImage;味精=字符串.Format (“在序列化。MyIntegerData = {0}, MyStringData = {1} "模板。MyIntegerData myImage.MyStringData);MessageBox.Show(味精);/ /清理ms.Close ();myImage.Dispose ();codecs.Dispose ();}

LEADTOOLS成像、医学和文档
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。