通过.NET 框架下的FromBase64String和ToBase64String方法可以很容易地实现图象文件和XML文件的互换。这样可以轻易解决以XML格式保存图片的问题。以下是利用VB.NET实现图象文件和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
- <System.Diagnostics.DebuggerStepThrough()> 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 = "Button1"
- Me.Button1.Size = New System.Drawing.Size(115, 23)
- Me.Button1.TabIndex = 0
- Me.Button1.Text = "将图象保存成XML"
- Button2
- Me.Button2.Location = New System.Drawing.Point(365, 98)
- Me.Button2.Name = "Button2"
- Me.Button2.Size = New System.Drawing.Size(115, 23)
- Me.Button2.TabIndex = 1
- Me.Button2.Text = "从XML中得到图象"
- PictureBox1
- Me.PictureBox1.Location = New System.Drawing.Point(18, 6)
- Me.PictureBox1.Name = "PictureBox1"
- 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 = "Button3"
- Me.Button3.Size = New System.Drawing.Size(115, 23)
- Me.Button3.TabIndex = 3
- Me.Button3.Text = "浏览图片…"
- Label1
- Me.Label1.Location = New System.Drawing.Point(369, 135)
- Me.Label1.Name = "Label1"
- 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 = "Label2"
- Me.Label2.Size = New System.Drawing.Size(130, 16)
- Me.Label2.TabIndex = 5
- Me.Label2.Text = "【孟宪会之精彩世界】"
- 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 = "Form1"
- Me.Text = "图象文件和XML格式文件互换例子"
- Me.ResumeLayout(False)
- End Sub
- #End Region
- Private MyFile As String = ""
- Private MyFileExt As String = ""
- 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("c:\MyPhoto.xml")
- Dim picNode As System.Xml.XmlNode
- picNode = MyXml.SelectSingleNode("/pic/photo")
- 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 = "" Then
- MessageBox.Show("请选择一个图片!", "错误", 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("<pic><name>孟宪会</name><photo>" + pic + "</photo></pic>")
- MyXml.Save("c:\MyPhoto.xml")
- Label1.Text = "文件被保存到了:" + Microsoft.VisualBasic.ChrW(13) + "c:\MyPhoto.xml"
- 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 = "c:\"
- openFileDialog1.Filter = "PNG(*.png)|*.png|Gif(*.gif)|*.gif|Jpg(*.jpg)|*.jpg|所有图象文件(*.*)|*.*"
- openFileDialog1.FilterIndex = 2
- openFileDialog1.RestoreDirectory = True
- If openFileDialog1.ShowDialog() = DialogResult.OK Then
- MyFile = openFileDialog1.FileName()
- MyFileExt = MyFile.Substring(MyFile.LastIndexOf(".") + 1)
- End If
- End Sub
- Public Function GetImageType(ByVal str As String) As System.Drawing.Imaging.ImageFormat
- Select Case str.ToLower()
- Case "jpg"
- Return System.Drawing.Imaging.ImageFormat.Jpeg
- Case "gif"
- Return System.Drawing.Imaging.ImageFormat.Gif
- Case "tiff"
- Return System.Drawing.Imaging.ImageFormat.Tiff()
- Case "icon"
- Return System.Drawing.Imaging.ImageFormat.Icon
- Case "image/png"
- 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("IExplore.exe", "http://xml.sz.luohuedu.net/")
- End Sub
- End Class
【编辑推荐】