Was soll ich beachten wenn ich einen gdi+ loop in einem Gif Dateiformat speichern will.

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Gelöschter Benutzer.

    Was soll ich beachten wenn ich einen gdi+ loop in einem Gif Dateiformat speichern will.

    Irgendeine Kleinigkeit lies sich immer finden bei der Suche VB.Net verstehen zu lernen. Diesmal weiß ich einfach nicht wo ich suchen soll. Um mir die Hinweise zu erarbeiten versuche ich mein Glück mit folgendem Code

    Quellcode: vb.net

    1. Imports System.Drawing.Drawing2D
    2. Public Class Form1
    3. Dim WithEvents t As New Timer() With {.Interval = 50}
    4. Dim zweiPlusZwei As Boolean
    5. Dim startUndZiel As Integer
    6. Dim dieEins As Integer
    7. Dim minus As Integer
    8. Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    9. CenterToScreen()
    10. t.Start()
    11. DoubleBuffered = True
    12. zweiPlusZwei = True
    13. startUndZiel = 10
    14. dieEins = 1
    15. minus = 200
    16. End Sub
    17. Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    18. ' Create a GraphicsPath object and add a rectangle to it.
    19. Dim myPath As New GraphicsPath
    20. Dim pathRect As New Rectangle(20, startUndZiel, 100, minus) ' falls minus ersetzt wird durch eine Zahl bewegt sich der Monolit, so ist es nur eine optische Täuschung
    21. myPath.AddRectangle(pathRect)
    22. ' Draw the path to the screen.
    23. Dim myPen As New Pen(Color.Black, 2)
    24. e.Graphics.DrawPath(myPen, myPath)
    25. End Sub
    26. Private Sub t_Tick(sender As Object, e As EventArgs) Handles t.Tick
    27. If zweiPlusZwei = True Then
    28. If startUndZiel <= 128 Then
    29. startUndZiel += dieEins
    30. minus -= dieEins
    31. Else
    32. zweiPlusZwei = False
    33. End If
    34. End If
    35. If zweiPlusZwei = False Then
    36. If startUndZiel > 10 Then
    37. startUndZiel -= dieEins
    38. minus += dieEins
    39. Else
    40. zweiPlusZwei = True
    41. End If
    42. End If
    43. Refresh()
    44. End Sub
    45. End Class


    den ich in einr Gif Datei speichern will. Es sollte aber nicht einfach eine Bildschirmaufnahme sein. Falls zu viel Arbeit anfallen sollte bitte ich um einen oder zwei Hinweis(e) wo und was ich suchen und lernen sollte.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    In kleinen Schritten find ich weiter. Mit deinem (RodFromGermany) Code wurden nur zwei der drei Bilder mit dem Gif Format wiedergegben und nach dem zweiten Bild hörte der loop auf. In meinem Systembereich war das so, was nicht bedeuten muss das, dass selbe in deinem System stattfand. Auch wenn ich es irgendwie schaffen sollte einen Loop zu speichern, weiß ich beim besten willen nicht wie ich meinen Loop speichern soll.
    @Stefan Mihael Rihar Poste mal die 3 Einzelbilder und die GIF.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Stefan Mihael Rihar Nutze die Dateianhangs-Funktionalität des Forums:
    Erweiterte Antwort => Dateianhänge => Hochladen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich habe mich nur um den Versuch die Funktion verstehen zu lernen nicht kreativ bemüht. Ich will wenn möglich erst die Funktionalität kennen lernen um mich dann der Kreativität hingeben zu können. Das Gif Bild bewegt sich nicht. Ich habe deinen Code befolgt und die Verweise verwendet um die Imports verwenden zu können. Ich gebe mein Bestes um keine Fargen mehr stellen zu müssen.
    Bilder
    • MyGif.gif

      811 Byte, 128×128, 742 mal angesehen
    Dateien
    • Bitmap1.bmp

      (49,21 kB, 235 mal heruntergeladen, zuletzt: )
    • Bitmap2.bmp

      (49,21 kB, 172 mal heruntergeladen, zuletzt: )
    • Bitmap3.bmp

      (49,21 kB, 218 mal heruntergeladen, zuletzt: )

    Gelöschter Benutzer schrieb:

    Das Gif Bild bewegt sich nicht.
    Bei mir schon. IrfanView, W10-64.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hm. Ok. Mit dem Programm IrfanView, W10-64 ist die Bewegung sichtbar. An der Geschwindigkeit sollte ich noch basteln können. Mittlerweile habe ich auch einen Weg gefunden von meinem Code zu mindest einmal immer das Bild der letzten Bewegung zu speichern. Ist noch nicht das Ziel aber immer hin.

    VB.NET-Quellcode

    1. Imports System.Drawing.Drawing2D
    2. Public Class Form1
    3. Dim WithEvents t As New Timer() With {.Interval = 50}
    4. Dim zweiPlusZwei As Boolean
    5. Dim startUndZiel As Integer
    6. Dim dieEins As Integer
    7. Dim minus As Integer
    8. Dim x As Integer = Me.Width
    9. Dim y As Integer = Me.Height
    10. Dim bm As New Bitmap(x, y)
    11. Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    12. CenterToScreen()
    13. t.Start()
    14. DoubleBuffered = True
    15. zweiPlusZwei = True
    16. startUndZiel = 10
    17. dieEins = 1
    18. minus = 200
    19. End Sub
    20. Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    21. ' Create a GraphicsPath object and add a rectangle to it.
    22. Dim myPath As New GraphicsPath
    23. Dim pathRect As New Rectangle(20, startUndZiel, 100, minus) ' falls minus ersetzt wird durch eine Zahl bewegt sich der Monolit so ist es nur eine optische Täuschung
    24. myPath.AddRectangle(pathRect)
    25. ' Draw the path to the screen.
    26. Dim myPen As New Pen(Color.Black, 2)
    27. e.Graphics.DrawPath(myPen, myPath)
    28. Me.DrawToBitmap(bm, New Rectangle(0, 0, x, y))
    29. SaveImage("C:\Users\Stefan Mihael\Pictures\am anfang.bmp", bm) 'den Pfad in dem gespeichert werden soll eingeben. Ich verwende meinen. . .
    30. End Sub
    31. Private Sub t_Tick(sender As Object, e As EventArgs) Handles t.Tick
    32. If zweiPlusZwei = True Then
    33. If startUndZiel <= 128 Then
    34. startUndZiel += dieEins
    35. minus -= dieEins
    36. Else
    37. zweiPlusZwei = False
    38. End If
    39. End If
    40. If zweiPlusZwei = False Then
    41. If startUndZiel > 10 Then
    42. startUndZiel -= dieEins
    43. minus += dieEins
    44. Else
    45. zweiPlusZwei = True
    46. End If
    47. End If
    48. Refresh()
    49. End Sub
    50. Public Sub SaveImage(filename As String, image As Image)
    51. Dim path As String = System.IO.Path.Combine(My.Application.Info.DirectoryPath, filename & ".Bmp")
    52. Dim mySource As New Bitmap(image.Width, image.Height)
    53. Dim grfx As Graphics = Graphics.FromImage(mySource)
    54. grfx.DrawImageUnscaled(image, Point.Empty)
    55. grfx.Dispose()
    56. mySource.Save(filename, System.Drawing.Imaging.ImageFormat.Bmp)
    57. mySource.Dispose()
    58. End Sub
    59. End Class


    Die neue Frage die sich mir für mein Projekt stellt, wie kann ich nur den Arbeitsbereich speichern ohne den Rand. Dann werde ich vielleicht auch meineArbeit als Gif speichern können ohne den vorgegebenen Rand sehen zu müssen.

    Gelöschter Benutzer schrieb:

    wie kann ich nur den Arbeitsbereich speichern ohne den Rand
    Was meinst Du damit?
    Form1_Paint() malt ausschließlich die GUI bzw. deren Bestandteile.
    DrawToBitmap() und SaveImage() hat in dieser Routine nix zu suchen :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Gut. Ich weiß leider nicht in welcher Routine ich anfangen soll die Ausgabe des Loops zu speichern. Funktioniert hat es ich habe zu mindest einmal dei letzte Ausgabe bevor ich Stop Taste des Compilers betättigt habe gespeichert. Nun habe ich mir überlegt vielleicht lassen sich alle Frames der Ausgabe in einer Wiederholung speichern und als Gif wiedergeben. Alles nur reine Theorie. Doch wäre ich Experte würde ich (zum Glück) keine Fargen mehr stellen müssen. Von einem 1%igem Wissenstand des Programms kenn ich nur 0,01%, und das auch nur ohne Bestättigung. Ich lerne gerne dazu und lass mich auch belehren. Ist billiger als ein 3 Tages Kurs für 2.500 €

    Mit dem Rand meine ich den Rand des Ausgabefensters. Also der blaue Rand mit dem Form1 Titel.
    Dateien
    • am anfang.bmp

      (360,05 kB, 163 mal heruntergeladen, zuletzt: )
    @Stefan Mihael Rihar Du malst diesen Rand da hin, wenn Dein Code aus Post #1 noch aktuell ist:

    VB.NET-Quellcode

    1. Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    2. ' Create a GraphicsPath object and add a rectangle to it.
    3. Dim myPath As New GraphicsPath
    4. Dim pathRect As New Rectangle(20, startUndZiel, 100, minus) ' falls minus ersetzt wird durch eine Zahl bewegt sich der Monolit, so ist es nur eine optische Täuschung
    5. myPath.AddRectangle(pathRect)
    6. ' Draw the path to the screen.
    7. Dim myPen As New Pen(Color.Black, 2)
    8. e.Graphics.DrawPath(myPen, myPath)
    9. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Die Befehlskette für eine Ausgabe ohne Rand hab ich gefunden. Ich muss sie in Sub Form1_Load​​ schreiben den sonst werden die Schritte der Ausgabe nicht mehr dargestellt, (falls ich sie zum Beispiel in Sub Form1_Paint​​ schreibe). Die Befehlskette ist Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None​​.

    Das war aber wieder nur ein mini mini Schritt zum Ziel. Auch Ok.

    Ich versuche die Routine zu finden in die ich bedenkenlos ​DrawToBitmap() und SaveImage()​​ schreiben kann. Lösungsanweisungen , willkommen.
    @Stefan Mihael Rihar So was (ungetestet):

    VB.NET-Quellcode

    1. Using bmp = New Bitmap(100, 100)
    2. Dim gr = Graphics.FromImage(bmp)
    3. gr.DrawLine(Pens.Black, 0, 0, 100, 100)
    4. bmp.Save("c:\Temp\Test.bmp")
    5. End Using
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    (getestet): Ja. Geht. Falls das Wort Frames ein Begriff ist könnte die nächste Stufe sein diese zu speichern. Vielleicht auch nicht. der Befehl DrawToBitmap ist auch ein Stolperstein. Ich weiß nicht, ist er nur ein Zwischenspeicher? Und wie kann ich etwas Auslesen oder sichtbar machen mittels des Befehls? Zuviele Fragen.
    Die nächste Stufe war jedenfalls

    VB.NET-Quellcode

    1. Public Class Form1
    2. Sub castleGrayscul(ByVal a As EventArgs) 'castleGrayscul versus Monkeyisland. . .
    3. Using bmp = New Bitmap(100, 100) '(Me.Width, Me.Height)
    4. Dim gr = Graphics.FromImage(bmp)
    5. gr.DrawLine(Pens.Black, 0, 0, 100, 100)
    6. bmp.Save("c:\Temp\Test.bmp")
    7. End Using
    8. End Sub
    9. Private Sub Form1_Load(sender As Object, a As System.EventArgs) Handles Me.Load
    10. castleGrayscul(a)
    11. End Sub
    12. End Class


    mit dem Ergebnis
    Bilder
    • Test.bmp

      358 Byte, 100×100, 680 mal angesehen
    Erläutere

    Gelöschter Benutzer schrieb:

    etwas Auslesen oder sichtbar machen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ​DrawToBitmap ist ein Befehl mit dem ich nicht weiß was ich anfangen soll. Ich kenne die Funktion nicht die der Befehl erzeugt. ​e.Graphics.DrawLine usw. konnte ich im Sub Paint sehen. Ich konnte eine Linie sichtbar machen und das war das Ergebnis. Für DrawToBitmap weiß ich nicht was das Ergebnis sein soll. Deswegen verstehe ich auch nicht was der praktische Nutzen sein soll und ob ich den Befehl für mein Projekt eine, Gif Datei aus einem Loop erstellen überhaupt verwendbar ist.
    @Stefan Mihael Rihar Name ist Programm. ;)
    Einen solchen Befehl musst Du selbst schreiben und darin das tun, was der Name sagt: Malen in eine Bitmap-Instanz.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Soweit mein Wissen ausreicht, wird eine Variable mit DrawToBitmap gespeichert. Ich habe kein Beispiel gefunden wie ich die Variable auf dem Bildschirm ausgeben kann. Logisch herleiten mit den Informationen die ich verstehen konnte hat auch nicht gereicht. Eigentlich versuche ich entscheiden zu lernen welche Informationen zu den Befehlen die ich schon angekratzt habe mich zu meinem Ziel fühern könnten.
    Eine Antwort die passte hatte Florian Haupt ein Mitglied des MS Developer Network's. Nachzulesen unter folgendem Link:

    social.msdn.microsoft.com/Foru…t-das?forum=visualbasicde

    Es kann eine Klasse erstellt werden die den technischen Teil ausführt:

    Klasse
    Imports System.Windows.Media
    Imports System.Windows.Interop
    Imports System.Windows.Media.Imaging ' GIF
    Imports System.Runtime.InteropServices ' Marshal

    Public Class AnimatedGifEncoder
    Private GifEncoder As New System.Windows.Media.Imaging.GifBitmapEncoder
    ''' <summary>
    ''' Return the GIF specification version. This always returns "GIF89a"
    ''' </summary>
    Public ReadOnly Property EncoderVersion As String
    Get
    Return "GIF89a"
    End Get
    End Property
    ''' <summary>
    ''' Get or set a value that indicate if the GIF will repeat the animation after the last frame is shown. The default value is True
    ''' </summary>
    Public Property Repeat As Boolean = True
    ''' <summary>
    ''' Get or set a collection of metadata string to be embedded in the GIF file. Each string has a max length of 254
    ''' characters (Any character above this limit will be truncated). The string will be encoded UTF-7.
    ''' </summary>
    Public Property MetadataString As List(Of String) = New List(Of String)
    ''' <summary>
    ''' Get or set the amount of time each frame will be shown (in milliseconds). The default value is 200ms
    ''' </summary>
    Public Property FrameRate As Integer = 200
    ''' <summary>
    ''' Add a frame to the encoder frame collection
    ''' </summary>
    ''' <param name="Frame">The bitmap to be added</param>
    Public Sub AddFrame(Frame As Bitmap)
    If Frame IsNot Nothing Then
    If Not (Frame.Width = 0) And Not (Frame.Height = 0) Then
    Dim bmpSource = Imaging.CreateBitmapSourceFromHBitmap(Frame.GetHbitmap,
    IntPtr.Zero,
    Windows.Int32Rect.Empty,
    BitmapSizeOptions.FromEmptyOptions)
    GifEncoder.Frames.Add(BitmapFrame.Create(bmpSource))
    Else
    Throw New ArgumentException("Argument Frame, The bitmap size cannot be zero")
    End If
    Else
    Throw New ArgumentException("Argument Frame cannot be nothing")
    End If
    End Sub
    ''' <summary>
    ''' Writes the animated GIF binary to a specified IO.Stream
    ''' </summary>
    ''' <param name="Stream">The stream where the binary is to be output. Can be any object type that derives from IO.Stream</param>
    Public Sub Save(Stream As IO.Stream)
    Dim Data() As Byte
    If Not GifEncoder.Frames.Count = 0 Then
    'Get the raw binary
    Using MStream As New IO.MemoryStream
    GifEncoder.Save(MStream)
    Data = MStream.ToArray
    End Using
    Else
    Throw New Exception("Cannot encode the Gif. The frame collection is empty.")
    ' Only documented exception is if Frames.count=0
    End If
    'Locate the right location where to insert the metadata in the binary
    'This will be just before the first label &H0021F9 (Graphic Control Extension)
    Dim MetadataPTR As Integer = -1
    Dim flag As Integer = 0
    Do
    MetadataPTR += 1
    If Data(MetadataPTR) = 0 Then
    If Data(MetadataPTR + 1) = &H21 Then
    If Data(MetadataPTR + 2) = &HF9 Then
    flag = 1
    End If
    End If
    End If
    Loop While flag = 0
    'SET METADATA Repeat
    'This add an Application Extension Netscape2.0
    If Repeat Then
    Dim Temp(CInt(Data.Length) - 1 + 19) As Byte
    'label: &H21, &HFF + one byte: length(&HB) + NETSCAPE2.0 + one byte: Datalength(&H3) + {1, 0, 0} + Block terminator, 1 byte, &H00
    Dim ApplicationExtension() As Byte = {&H21, &HFF, &HB, &H4E, &H45, &H54, &H53, &H43, &H41, &H50, &H45, &H32, &H2E, &H30, &H3, &H1, &H0, &H0, &H0}
    Array.Copy(Data, Temp, MetadataPTR)
    Array.Copy(ApplicationExtension, 0, Temp, MetadataPTR + 1, 19)
    Array.Copy(Data, MetadataPTR + 1, Temp, MetadataPTR + 20, Data.Length - MetadataPTR - 1)
    Data = Temp
    End If
    'SET METADATA Comments
    'This add a Comment Extension for each string
    If MetadataString.Count > 0 Then
    For Each Comment As String In MetadataString
    If Not String.IsNullOrEmpty(Comment) Then
    Dim TheComment As String
    If Comment.Length > 254 Then
    TheComment = Comment.Substring(0, 254)
    Else
    TheComment = Comment
    End If
    Dim CommentStringBytes() As Byte = System.Text.UTF7Encoding.UTF7.GetBytes(TheComment)
    Dim DataString() As Byte = New Byte() {&H21, &HFE, CByte(CommentStringBytes.Length)}
    DataString = DataString.Concat(CommentStringBytes).Concat(New Byte() {&H0}).ToArray
    Dim Temp(Data.Length - 1 + DataString.Length) As Byte
    Array.Copy(Data, Temp, MetadataPTR)
    Array.Copy(DataString, 0, Temp, MetadataPTR + 1, DataString.Length)
    Array.Copy(Data, MetadataPTR + 1, Temp, MetadataPTR + DataString.Length + 1, Data.Length - MetadataPTR - 1)
    Data = Temp
    End If
    Next
    End If
    'SET METADATA frameRate
    'Sets the third and fourth byte of each Graphic Control Extension (5 bytes from each label 0x0021F9)
    For x As Integer = 0 To Data.Count - 1
    If Data(x) = 0 Then
    If Data(x + 1) = &H21 Then
    If Data(x + 2) = &HF9 Then
    If Data(x + 3) = 4 Then
    'word, little endian, the hundredths of second to show this frame
    Dim Bte() As Byte = BitConverter.GetBytes(FrameRate \ 10)
    Data(x + 5) = Bte(0)
    Data(x + 6) = Bte(1)
    End If
    End If
    End If
    End If
    Next
    Stream.Write(Data, 0, Data.Length)
    End Sub
    End Class


    Damit man den Klasseneintrag verwenden kann sollte man fehlende Verweise die im Bild blueScreen.png angegeben sind hinzufügen. Die Bilddatei blindes Huhn.png startet einen möglichen Erklärungsversuch Verweise zu verwenden. Die Verweise sind notwendig damit im Projekt die Import Anweisungen vom Compiler gelesen werden können.

    Der Public Class Form1 Eintrag kann kopiert werden:

    Form

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim WithEvents t As New Timer() With {.Interval = 50}
    3. Dim blackPen As New Pen(Color.Black, 3)
    4. Dim zweiPlusZwei As Boolean
    5. Dim startUndZiel As Integer
    6. Dim dieEins As Integer
    7. Dim minus As Integer
    8. Dim counter As Integer
    9. Dim search As New Label()
    10. Dim Encoder1 As New AnimatedGifEncoder
    11. Public Property MetadataComment As List(Of String) = New List(Of String)
    12. Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    13. Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
    14. CenterToScreen()
    15. t.Start()
    16. DoubleBuffered = True
    17. zweiPlusZwei = True
    18. startUndZiel = 10
    19. dieEins = 1
    20. minus = 200
    21. counter = 1
    22. End Sub
    23. Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    24. search.Size = New System.Drawing.Size(25, 13)
    25. search.Location = New System.Drawing.Point(237, 5)
    26. search.Text = counter
    27. Me.Controls.Add(search)
    28. DrawRectangleRectangle(e)
    29. 'e.Graphics.DrawEllipse(New Pen(Color.Red, 3), 150, 150, 20, 20)
    30. End Sub
    31. Private Sub t_Tick(sender As Object, e As EventArgs) Handles t.Tick
    32. If zweiPlusZwei = True Then
    33. If startUndZiel <= 128 Then
    34. startUndZiel += dieEins
    35. minus -= dieEins
    36. Else
    37. zweiPlusZwei = False
    38. End If
    39. End If
    40. If zweiPlusZwei = False Then
    41. If startUndZiel > 10 Then
    42. startUndZiel -= dieEins
    43. minus += dieEins
    44. Else
    45. zweiPlusZwei = True
    46. End If
    47. counter += 1
    48. End If
    49. If counter = 121 Then
    50. t.Stop()
    51. SaveImage("C:\Temp\Probst.gif") 'wenn saveImage mit FormClosed verwendet wird hier löschen oder als Kommentar einschalten
    52. ' oder warten bis der counter das Ende erreicht für eine automatische Speicherung
    53. End If
    54. Refresh()
    55. castleGrayscul(e)
    56. End Sub
    57. Public Sub SaveImage(filename As String)
    58. Dim FS As New IO.FileStream(filename, IO.FileMode.Create)
    59. Encoder1.FrameRate = t.Interval
    60. Encoder1.MetadataString = MetadataComment
    61. Encoder1.Repeat = True
    62. Encoder1.Save(FS)
    63. FS.Flush()
    64. FS.Close()
    65. End Sub
    66. Public Sub DrawRectangleRectangle(ByVal e As PaintEventArgs)
    67. e.Graphics.DrawRectangle(blackPen, 20, startUndZiel, 100, minus)
    68. End Sub
    69. Sub castleGrayscul(ByVal e As EventArgs) 'castleGrayscul versus Monkeyisland. . .
    70. Dim bmp As New Bitmap(Width - 16, Height - 39)
    71. DrawToBitmap(bmp, New Rectangle(0, 0, bmp.Width, bmp.Height))
    72. Encoder1.AddFrame(bmp)
    73. bmp.Dispose()
    74. End Sub
    75. 'Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
    76. ' SaveImage("C:\Temp\Probst.gif") 'mit der Tastenkombination Alt + F4 schließen sonst wird nicht gespeichert
    77. 'End Sub
    78. End Class


    Im Leben sind Schritt für Schritt Anweisungen herzlich Willkommen. Mit meinen Überlegungen fand ich, dass kreative Arbeiten, zum Beispiel Animationen den größeren Teil der Haptik ausmachen. Ich hoffe meine Einträge können verwertet werden und das sich jeder/jede dem kreativen Teil seines/ihres Weges widmen kann.

    Mit freundlichen Grüßen

    Stefan

    p.s.: Das Ergebnis Probst.gif im Bildanhang.
    Bilder
    • blueScreen.png

      34,82 kB, 908×249, 64 mal angesehen
    • blindes Huhn.png

      50,66 kB, 1.269×808, 64 mal angesehen
    • Probst.gif

      242,37 kB, 268×222, 79 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Gelöschter Benutzer“ ()