把图象文件转换成XML格式文件
作者: 孟宪会 出自: 【孟宪会之精彩世界】 发布日期: 2003-8-31 2:10:12
利用.NET 框架下的FromBase64String和ToBase64String方法可以很容易地实现图象文件和XML文件的互换。这样可以轻易解决以XML格式保存图片的问题。代码如下: Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows 窗体设计器生成的代码 " Public Sub New () MyBase .New() InitializeComponent() ' 在 InitializeComponent() 调用之后添加任何初始化 End Sub ' 窗体重写处置以清理组件列表。 Protected Overloads Overrides Sub Dispose( ByVal disposing As Boolean ) If disposing Then If Not (components Is Nothing ) Then components.Dispose() End If End If MyBase .Dispose(disposing) End Sub ' Windows 窗体设计器所必需的 Private components As System.ComponentModel.IContainer ' 注意:以下过程是 Windows 窗体设计器所必需的 ' 可以使用 Windows 窗体设计器修改此过程。 ' 不要使用代码编辑器修改它。 Friend WithEvents Button1 As System.Windows.Forms.Button Friend WithEvents Button2 As System.Windows.Forms.Button Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox Friend WithEvents Button3 As System.Windows.Forms.Button Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents Label2 As System.Windows.Forms.Label & lt;System.Diagnostics.DebuggerStepThrough() & gt; Private Sub InitializeComponent() Me .Button1 = New System.Windows.Forms.Button() Me .Button2 = New System.Windows.Forms.Button() Me .PictureBox1 = New System.Windows.Forms.PictureBox() Me .Button3 = New System.Windows.Forms.Button() Me .Label1 = New System.Windows.Forms.Label() Me .Label2 = New System.Windows.Forms.Label() Me .SuspendLayout() ' ' Button1 ' Me .Button1.Location = New System.Drawing.Point( 365 , 63 ) Me .Button1.Name = & quot;Button1 & quot; Me .Button1.Size = New System.Drawing.Size( 115 , 23 ) Me .Button1.TabIndex = 0 Me .Button1.Text = & quot;将图象保存成XML & quot; ' ' Button2 ' Me .Button2.Location = New System.Drawing.Point( 365 , 98 ) Me .Button2.Name = & quot;Button2 & quot; Me .Button2.Size = New System.Drawing.Size( 115 , 23 ) Me .Button2.TabIndex = 1 Me .Button2.Text = & quot;从XML中得到图象 & quot; ' ' PictureBox1 ' Me .PictureBox1.Location = New System.Drawing.Point( 18 , 6 ) Me .PictureBox1.Name = & quot;PictureBox1 & quot; Me .PictureBox1.Size = New System.Drawing.Size( 320 , 460 ) Me .PictureBox1.TabIndex = 2 Me .PictureBox1.TabStop = False ' ' Button3 ' Me .Button3.Location = New System.Drawing.Point( 365 , 28 ) Me .Button3.Name = & quot;Button3 & quot; Me .Button3.Size = New System.Drawing.Size( 115 , 23 ) Me .Button3.TabIndex = 3 Me .Button3.Text = & quot;浏览图片 & amp;# 8230 ; & quot; ' ' Label1 ' Me .Label1.Location = New System.Drawing.Point( 369 , 135 ) Me .Label1.Name = & quot;Label1 & quot; Me .Label1.Size = New System.Drawing.Size( 105 , 95 ) Me .Label1.TabIndex = 4 ' ' Label2 ' Me .Label2.Location = New System.Drawing.Point( 367 , 437 ) Me .Label2.Name = & quot;Label2 & quot; Me .Label2.Size = New System.Drawing.Size( 130 , 16 ) Me .Label2.TabIndex = 5 Me .Label2.Text = & quot;【孟宪会之精彩世界】 & quot; ' ' Form1 ' Me .AutoScaleBaseSize = New System.Drawing.Size( 5 , 13 ) Me .ClientSize = New System.Drawing.Size( 500 , 480 ) Me .Controls.AddRange( New System.Windows.Forms.Control() { Me .Label2, Me .Label1, _ Me .Button3, Me .PictureBox1, Me .Button2, Me .Button1}) Me .Name = & quot;Form1 & quot; Me .Text = & quot;图象文件和XML格式文件互换例子 & quot; Me .ResumeLayout( False ) End Sub #End Region Private MyFile As String = & quot; & quot; Private MyFileExt As String = & quot; & quot; Private Sub Button2_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button2.Click Dim pic As String Dim MyXml As System.Xml.XmlDocument = New System.Xml.XmlDocument() MyXml.Load( & quot;c: MyPhoto.xml & quot;) Dim picNode As System.Xml.XmlNode picNode = MyXml.SelectSingleNode( & quot; / pic / photo & quot;) pic = picNode.InnerText Dim memoryStream As System.IO.MemoryStream memoryStream = New System.IO.MemoryStream(Convert.FromBase64String(pic)) Me .PictureBox1.Image = New System.Drawing.Bitmap(memoryStream) memoryStream.Close() End Sub Private Sub Button1_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click If MyFile = & quot; & quot; Then MessageBox.Show( & quot;请选择一个图片! & quot;, & quot;错误 & quot;, MessageBoxButtons.OK, MessageBoxIcon.Warning) Exit Sub End If Dim MyImg As System.Drawing.Image = MyImg.FromFile(MyFile) Dim memoryStream As System.IO.MemoryStream = New System.IO.MemoryStream() MyImg.Save(memoryStream, GetImageType(MyFileExt)) Dim b() As Byte b = memoryStream.GetBuffer() Dim pic As String = Convert.ToBase64String(b) memoryStream.Close() Dim MyXml As System.Xml.XmlDocument = New System.Xml.XmlDocument() MyXml.LoadXml( & quot; & lt;pic & gt; & lt;name & gt;孟宪会 & lt; / name & gt; & lt;photo & gt; & quot; + pic + & quot; & lt; / photo & gt; & lt; / pic & gt; & quot;) MyXml.Save( & quot;c: MyPhoto.xml & quot;) Label1.Text = & quot;文件被保存到了: & quot; + Microsoft.VisualBasic.ChrW( 13 ) + & quot;c: MyPhoto.xml & quot; End Sub Private Sub Button3_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button3.Click Dim openFileDialog1 As New OpenFileDialog() openFileDialog1.InitialDirectory = & quot;c: & quot; openFileDialog1.Filter = & quot;PNG( * .png)| * .png|Gif( * .gif)| * .gif|Jpg( * .jpg)| * .jpg|所有图象文件( * . * )| * . *& quot; openFileDialog1.FilterIndex = 2 openFileDialog1.RestoreDirectory = True If openFileDialog1.ShowDialog() = DialogResult.OK Then MyFile = openFileDialog1.FileName() MyFileExt = MyFile.Substring(MyFile.LastIndexOf( & quot;. & quot;) + 1 ) End If End Sub Public Function GetImageType( ByVal str As String ) As System.Drawing.Imaging.ImageFormat Select Case str .ToLower() Case & quot;jpg & quot; Return System.Drawing.Imaging.ImageFormat.Jpeg Case & quot;gif & quot; Return System.Drawing.Imaging.ImageFormat.Gif Case & quot;tiff & quot; Return System.Drawing.Imaging.ImageFormat.Tiff() Case & quot;icon & quot; Return System.Drawing.Imaging.ImageFormat.Icon Case & quot;image / png & quot; Return System.Drawing.Imaging.ImageFormat.Png Case Else Return System.Drawing.Imaging.ImageFormat.MemoryBmp End Select End Function Private Sub Form1_Closing( ByVal sender As Object , ByVal e As System.ComponentModel.CancelEventArgs) _ Handles MyBase .Closing System.Diagnostics.Process.Start( & quot;IExplore.exe & quot;, & quot;http: // xml.sz.luohuedu.net /& quot;) End Sub End Class
结果如下: