1 Previous Next 

Drawing Cards


In the Microsoft VB forum are currently (2016/2017) some guys actief who are great with Drawings. Here one of the samples tommytwotrain gave.
Option Infer On
Option Strict On
Option Explicit On
Public Class Form1
    Private WithEvents Timer1 As New System.Windows.Forms.Timer With {.Interval = 50, .Enabled = True}
    Private TheStep As Single = 0
    Private Cards As New List(Of Bitmap)
    Private Sub Form13_Load(sender As Object, e As EventArgsHandles MyBase.Load
        PictureBox1.Dock = DockStyle.Fill
        PictureBox1.BackColor = Color.Teal
        Me.Width = 500
        Me.Height = 500
        'make "Cards" list of 52+ single card images from full deck image
        Dim wc As New System.Net.WebClient
        Dim ImageInBytes() As Byte = wc.DownloadData("http://math.hws.edu/javanotes/c13/cards.png")
        Dim ImageStream As New IO.MemoryStream(ImageInBytes)
        Using bmpCards = New System.Drawing.Bitmap(ImageStream)
            Dim w As Integer = bmpCards.Width \ 13
            Dim h As Integer = bmpCards.Height \ 5
            Dim srcRect As Rectangle
            Dim destRect As Rectangle = New Rectangle(0, 0, w, h)
            Using bmpCard As Bitmap = New Bitmap(w, h)
                Using g As Graphics = Graphics.FromImage(bmpCard)
                    'read the cards into a list
                    For y = 0 To 4
                        For x = 0 To 12
                            srcRect = New Rectangle(x * w, y * h, w, h)
                            With g
                                .DrawImage(bmpCards, destRect, srcRect, GraphicsUnit.Pixel)
                                Cards.Add(CType(bmpCard.Clone, Bitmap))
                                If y = 4 And x = 3 Then Exit For
                            End With
                        Next
                    Next
                End Using
            End Using
        End Using
    End Sub
    Private Sub Timer1_Tick(sender As Object, e As EventArgsHandles Timer1.Tick
        TheStep = CSng(TheStep + 0.25)
        If TheStep > 17 Then TheStep = 0
        PictureBox1.Refresh()
    End Sub
    Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgsHandles PictureBox1.Paint
        Dim x, y As Integer
        Dim x2 = (Me.ClientSize.Width / 2) - 30
        Dim y2 = (Me.ClientSize.Height / 2) - 50
        For i = 0 To 51
            x = CInt(x2 + (0.7 * x2 * Math.Cos(i * TheStep / 57.8)))
            y = CInt(y2 + (0.7 * x2 * Math.Sin(i * TheStep / 57.8)))
            e.Graphics.DrawImage(Cards(i), x, y)
        Next
    End Sub
End Class



1 Previous Next