把图象文件转换成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
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
结果如下: