CodingClub.NET - клуб для программистов

Создание графического файла на основе данных, хранящихся в XML-документе

26 октября 2006 года

Приведенный далее код на основе данных, содержащихся в 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>
Исходник к статье можно скачать здесь

Автор: http://p-lib.pp.ru
Проголосуй:


Опубликовал: Программист
Просмотров: 1297
Комментариев: 0

 Не зарегистрированые пользоваетли не могут оставлять комментари

Не зарегистрированые пользоваетли не могут оставлять комментари


Чтобы оставить комментарий Вам нужно Зарегистрироваться или Войти в систему