通过.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
文章来源:http://www.hulian.top,转载请注明!