none
Ich würde gerne in der VB.Net Oberfläche einen GDI+ Loop als Gif Dateiformat speichern. Ist das möglich?

    Frage

  • Hallo.

    Ich studiere die GDI+ Möglichkeiten des VB.Net Programms. Es folgt ein kleiner Loop einer graphischen Ausgabe.

    Imports System.Drawing.Drawing2D
    
    Public Class Form1
        Dim WithEvents t As New Timer() With {.Interval = 50}
        Dim zweiPlusZwei As Boolean
        Dim startUndZiel As Integer
        Dim dieEins As Integer
        Dim minus As Integer
    
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            CenterToScreen()
            t.Start()
            DoubleBuffered = True
            zweiPlusZwei = True
            startUndZiel = 10
            dieEins = 1
            minus = 200
        End Sub
    
        Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
            ' Create a GraphicsPath object and add a rectangle to it.
            Dim myPath As New GraphicsPath
            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
            myPath.AddRectangle(pathRect)
    
            ' Draw the path to the screen.
            Dim myPen As New Pen(Color.Black, 2)
            e.Graphics.DrawPath(myPen, myPath)
        End Sub
    
        Private Sub t_Tick(sender As Object, e As EventArgs) Handles t.Tick
            If zweiPlusZwei = True Then
                If startUndZiel <= 128 Then
                    startUndZiel += dieEins
                    minus -= dieEins
                Else
                    zweiPlusZwei = False
                End If
            End If
    
            If zweiPlusZwei = False Then
                If startUndZiel > 10 Then
                    startUndZiel -= dieEins
                    minus += dieEins
                Else
                    zweiPlusZwei = True
                End If
            End If
            Refresh()
        End Sub
    
    End Class

    Ich wünsche mir die graphische Darstellung gespeichert in einem Gif Dateiformat, so dass ich mir wenn ich die Gif Datei Doppelklicke nur die graphische Bewegung angezeigt wird. Es muss kein Doppelklick sein, das Gif Dateiformat kann auch mit dem Windows Programm Fotos abgespielt werden so das gespeicherte Bewegungen abspielbar sind. Wenn eine Speicherung der Ausgabe des VB.Net Programms möglich ist würde ich gerne Wissen wie das geht. Danke.
    Donnerstag, 9. August 2018 17:17

Alle Antworten

  • Hallo Stefan Mihael Rihar,

    es ist möglich, aber der Encoder muss, so wie hier nachzulesen "Animated GIF encoder .NET" erweitert werden, um den GIF89a Teil - Code für den Encoder und Anwendungsbeispiel sind unter dem Link zu finden.

    Viel Erfolg!


    - Gruß Florian



    • Bearbeitet Florian Haupt Freitag, 10. August 2018 07:37 Tippfehler
    Freitag, 10. August 2018 07:35
  • Hm. Das wird wohl ungefähr ewig dauern bis ich an der Oberfläche schwimmen lerne. Am liebsten wäre mir ein Beispiel mit meinem Beispiel, dann hätte ich vielleicht ein Eck das hängen bleibt. Den Erfolgswunsch werd ich dringend brauchen.
    Freitag, 10. August 2018 12:06
  • Verstehe ich gerade nicht, wo da jetzt das Problem liegt. Deine Form ist ein Control und daher kannst Du nach jedem Paint oder am Ende einfach DrawToBitmap aufrufen um deine Form in ein Bitmap zu zeichnen, dieses dann als Frame in dein GIF, fertig. Du kannst natürlich auch direkt in deine GIF Frames Zeichnen und dir damit die Form vollständig sparen.

    - Gruß Florian

    Freitag, 10. August 2018 12:43
  • Ich habe noch nicht den Befehl DrawToBitmap aufgerufen. Wird noch etwas Arbeit notwendig sein um das Thema verstehen zu lernen. Direkt in ein GIF Frames zeichnen scheint einfach zu sein doch habe ich auch dazu keinen Begriff. Ich werde mich auch weiterhin bemühen meine Projektarbeiten nicht woanders abzuladen nur manchmal brauch ich einige Hinweise.

    Mit freundlichen Grüßen

    Stefan

    Freitag, 10. August 2018 14:56
  • Hallo Stefan Mihael Rihar,

    die Dokumentation zu Control.DrawToBitmap. Weiterhin benötigst Du die Größe, z. B. über die Size-Eigenschaft (bzw. Width, Height).

    Das gilt dann allgemein für jedes Control:

    • Bitmap in der Größe des Controls anlegen
    • Das Control mit DrawToBitmap ins Bitmap zeichnen lassen

    Bsp.: 

    Dim bmp as New Bitmap(meinControl.Width, meinControl.Height)
    meinControl.DrawToBitmap(bmp, New Rectangle(0,0, bmp.Width, bmp.Height))

    Das bmp kann dann in den Frame gespeichert werden.


    - Gruß Florian

    Montag, 13. August 2018 07:23
  • Mein Vb.Net Studium ohne Universitätszugang wird wohl eine Zeit dauern. Die Frage an der ich mich versuche ist wie ich mit dem Beispiel

    Public Class Form1
    
        Dim bmp As New Bitmap(Me.Width, Me.Height)
    
        Sub kleinerStein(ByVal a As EventArgs) 'castleGrayscul versus Monkeyisland. . .
    
            Me.DrawToBitmap(bmp, New Rectangle(0, 0, bmp.Width, bmp.Height))
    
        End Sub
    
        Private Sub Form1_Load(sender As Object, a As System.EventArgs) Handles Me.Load
    
            kleinerStein(a)
    
        End Sub
    
    End Class
     

    verstehen soll was ich mit meiner Kunst in den Frame speichern soll? Ich übe jeden Tag von Anfang an, falls sich das so bezeichnen lässt Vb.Net in mein Leben zu integrieren. Leider mühsam aber es geht. Das ist wichtig. Und ich würde gerne Wissen ist der Befehl DrawToBitmap ein Zwischenspeicher den ich nicht zu lesen weiß? Sichtbar machen ist für mich sehr wichtig.

    Mit freundlichen Grüßen

    Stefan

    Dienstag, 14. August 2018 18:29
  • Hallo Stefan Mihael Rihar.

    DrawToBitmap ist eine Methode der Klasse Control (Namespace: System.Windows.Forms), welche zwei Parameter hat und keinen Rückgabewert. Der erste Parameter (bitmap) gibt ein Object der Klasse Bitmap (Namespace: System.Drawing) an, auf dem gezeichnet werden soll. Der zweite Parameter (targetBounds) gibt ein Object der Struktur Rectangle (Namespace: System.Drawing) an, welches einen rechteckigen Bereich beschreibt, in dessen Grenzen gezeichnet werden soll.

    Nach dem Aufruf DrawToBitmap wurde in deine Bitmap Variable gezeichnet, die du als Parameter übergeben hast, dieses enthält nun ein Abbild deines Controls, zum Zeitpunkt des Aufrufs. Das Bitmap kann dann auf einem Anzeigegerät ausgegeben werden (Bildschirm, Drucker, ...) oder auch gespeichert (Bitmap hat dafür eine Methode Save) werden.


    - Gruß Florian

    Mittwoch, 15. August 2018 07:35
  • Ich finde keine Hinweis wie ich das Bitmap ( das mit DrawToBitmap eine Variable in meine Bitmap zeichnet ) auf dem Anzeigegerät Bildschirm ausgeben lassen kann.

    Mit freundlichem Gruß

    Stefan

    Donnerstag, 16. August 2018 17:06