Создание графического файла на основе данных, хранящихся в XML-документе
Приведенный далее код на основе данных, содержащихся в XML –документе создает графические файлы. Класс XmlDocument применяется для получения доступа к документу, а его метод Load реализует загрузку документа. Класс XmlNodeList образует список всех элементов документа. Свойство GetElementsByTagName этого класса возвращает элемент по его тегу, а свойство InnerText – текст, содержащийся внутри тега.
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Drawing.Drawing2D
Imports System.Xml
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim xmldoc As XmlDocument = New XmlDocument()
xmldoc.Load("pic.xml")
Dim items As XmlNodeList = xmldoc.GetElementsByTagName("picture")
Dim i As Integer
Dim text, font, path As String
Dim width, height As Integer
Dim color1, color2, bcolor As String
For i = 0 To items.Count - 1
text = xmldoc.GetElementsByTagName("Text").Item(i).InnerText
font = xmldoc.GetElementsByTagName("Font").Item(i).InnerText
width = Convert.ToInt32(xmldoc.GetElementsByTagName("Width").Item(i).InnerText)
height = Convert.ToInt32(xmldoc.GetElementsByTagName("Height").Item(i).InnerText)
color1 = xmldoc.GetElementsByTagName("Color1").Item(i).InnerText
color2 = xmldoc.GetElementsByTagName("Color2").Item(i).InnerText
bcolor = xmldoc.GetElementsByTagName("BColor").Item(i).InnerText
path = xmldoc.GetElementsByTagName("Path").Item(i).InnerText
CreateGraphic(text, width, height, font, color1, color2, bcolor, path)
Next
End Sub
Public Shared Sub CreateGraphic(ByVal text As String, _
ByVal width As Integer, _
ByVal height As Integer, _
ByVal font As String, _
ByVal color1 As String, _
ByVal color2 As String, _
ByVal bcolor As String, _
ByVal path As String)
Dim bm As Bitmap = New Bitmap(width, height)
Dim g As Graphics = Graphics.FromImage(bm)
Dim rec As RectangleF = New RectangleF(0, 0, 40, 20)
Dim lgb As LinearGradientBrush = New LinearGradientBrush(rec, _
Color.FromName(color1), _
Color.FromName(color2), _
LinearGradientMode.ForwardDiagonal)
Dim foundfont As Boolean = False
Dim fontsize As Integer = 100
Dim sizeofstring As SizeF
g.Clear(Color.FromName(bcolor))
Do While Not foundfont
Dim fc As Font = New Font(font, fontsize, FontStyle.Bold)
sizeofstring = g.MeasureString(text, fc)
Dim fl As Boolean = (sizeofstring.Width < bm.Width) And (sizeofstring.Height < bm.Height)
If fl Then
foundfont = True
g.DrawString(text, fc, lgb, 1, 1)
Else
fontsize -= 1
End If
Loop
If path.EndsWith("") Then
path = path.TrimEnd("")
End If
bm.Save(path + "" + text + ".jpeg", ImageFormat.Jpeg)
lgb.Dispose()
g.Dispose()
End Sub
Ниже представлено содержание файла pic.xml.
<piclist>
<picture>
<Text>First</Text>
<Font>arial</Font>
<Width>400</Width>
<Height>200</Height>
<Color1>red</Color1>
<Color2>green</Color2>
<BColor>yellow</BColor>
<Path>C:</Path>
</picture>
<picture>
<Text>Second</Text>
<Font>verdana</Font>
<Width>200</Width>
<Height>100</Height>
<Color1>blue</Color1>
<Color2>yellow</Color2>
<BColor>green</BColor>
<Path>C:</Path>
</picture>
</piclist>
Исходник к статье можно скачать здесь