Gif erstellen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Danke für deine Schnelle Hilfe.
    Ich habe allerdings noch eine Frage: Wie kann ich das in dem Code machen, dass das Programm die Bilder automatisch aus C:\Programme\Treenix nehmen kann. In dem Ordner sind immer Unterschiedlich viele Bilder drin.ersucht

    Ich habs bisher so versucht:

    VB.NET-Quellcode

    1. String [] imageFilePaths = new String[]{"C:\Programme\Treenix"};
    2. String outputFilePath = "C:\Programme\Treenix\Test.gif";
    3. AnimatedGifEncoder e = new AnimatedGifEncoder();
    4. e.Start( outputFilePath );
    5. e.SetDelay(500);
    6. //-1:no repeat,0:always repeat
    7. e.SetRepeat(0);
    8. for (int i = 0, count = imageFilePaths.Length; i < count; i++ )
    9. {
    10. e.AddFrame( Image.FromFile( imageFilePaths[i] ) );
    11. }
    12. e.Finish();
    13. /* extract Gif */
    14. string outputPath = "c:\\";
    15. GifDecoder gifDecoder = new GifDecoder();
    16. gifDecoder.Read( "C:\Programme\Treenix\Test.gif" );
    17. for ( int i = 0, count = gifDecoder.GetFrameCount(); i < count; i++ )
    18. {
    19. Image frame = gifDecoder.GetFrame( i ); // frame i
    20. frame.Save( outputPath + Guid.NewGuid().ToString()
    21. + ".png", ImageFormat.Png );
    22. }
    Wenn Du in C# programmierst, solltest Du Deine Strings anders aufbauen, sonst funkt es nicht.
    1. String [] imageFilePaths = new String[]{"C:\\Programme\\Treenix"};
    2. String [] imageFilePaths = new String[]{@"C:\Programme\Treenix"};
    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!
    Der Code von Treenix ist C#.
    Lesen können solltest Du ihn schon.
    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!
    Hier hast du den Code in VB.NET :

    VB.NET-Quellcode

    1. Dim imageFilePaths() As tring = New String() {"C:\Programme\Treenix"}
    2. Dim outputFilePath As String = "C:\Programme\Treenix\Test.gif"
    3. Dim e As AnimatedGifEncoder = New AnimatedGifEncoder
    4. e.Start(outputFilePath)
    5. e.SetDelay(500)
    6. '-1:no repeat,0:always repeat
    7. e.SetRepeat(0)
    8. Dim count As Integer = imageFilePaths.Length
    9. Do While (i < count)
    10. e.AddFrame(Image.FromFile(imageFilePaths(i)))
    11. Dim i As Integer = 0
    12. i = (i + 1)
    13. Loop
    14. e.Finish
    15. Dim outputPath As String = "c:\\"
    16. Dim gifDecoder As GifDecoder = New GifDecoder
    17. gifDecoder.Read("C:\Programme\Treenix\Test.gif")
    18. Dim count As Integer = gifDecoder.GetFrameCount
    19. Do While (i < count)
    20. Dim frame As Image = gifDecoder.GetFrame(i)
    21. Dim i As Integer = 0
    22. ' frame i
    23. frame.Save((outputPath _
    24. + (Guid.NewGuid.ToString + ".png")), ImageFormat.Png)
    25. i = (i + 1)
    26. Loop
    Mit folgendem Code (C#) generiere ich animierte GIFs aus MetaFiles:
    Spoiler anzeigen

    Quellcode

    1. using System.Windows.Media;
    2. using System.Windows.Media.Imaging;
    3. using Metafile = System.Drawing.Imaging.Metafile;
    4. internal void DrawMakroGif(string fileName, List<MakroPosition> lmp)
    5. {
    6. if (lmp.Count == 0)
    7. {
    8. MessageBox.Show("Kein Makro verfügbar.");
    9. return;
    10. }
    11. Rectangle rc = this.ClientRectangle;
    12. int width = rc.Width;
    13. int height = rc.Height;
    14. int stride = width * 4; // 4 Byte per Pixel
    15. byte[] pixels = new byte[height * stride];
    16. GifBitmapEncoder encoder = new GifBitmapEncoder();
    17. string tfn = System.IO.Path.GetTempFileName();
    18. foreach (MakroPosition mp in lmp)
    19. {
    20. DrawMetaFile(tfn, mp); // hier wird zu jeder Makro-Position ein Metafile abgespeichert
    21. Metafile emf = new Metafile(tfn);
    22. Bitmap bmp = new Bitmap(emf.Width, emf.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
    23. Graphics g = Graphics.FromImage(bmp);
    24. g.Clear(Color.White);
    25. g.DrawImage(emf, 0, 0);
    26. emf.Dispose();
    27. System.Drawing.Imaging.BitmapData bmpDataIn;
    28. bmpDataIn = bmp.LockBits(rc, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);
    29. Marshal.Copy(bmpDataIn.Scan0, pixels, 0, pixels.Length);
    30. bmp.UnlockBits(bmpDataIn);
    31. // Creates a new empty image
    32. BitmapSource image = BitmapSource.Create(
    33. width, // Breite der Bitmap in Pixeln
    34. height, // Höhe der Bitmap in Pixeln
    35. 96, // horizontale Punkte pro Zoll (dots per inch, dpi) der Bitmap
    36. 96, // vertikale Punkte pro Zoll (dots per inch, dpi) der Bitmap.
    37. PixelFormats.Pbgra32, // ARGB - 32 Bit pro Pixel
    38. null, // Define the image palette
    39. pixels,
    40. stride); // Schrittweite der Bitmap
    41. encoder.Frames.Add(BitmapFrame.Create(image));
    42. }
    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!