vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Workaround,vorläufig 
Autor: Manfred X
Datum: 19.09.14 09:38

Die Routine überprüft bei animierten GIFs, ob alle Frames zugreifbar sind.
Falls dies nicht der Fall ist, wird der erste verfügbare Frame zurückgegeben
(incl. Hinweis).

Damit diese Überprüfung durchführbar ist, darf der (File-)Stream, aus dem das
Bild erstellt wurde, nicht geschlossen oder Disposed sein.

Anwendung:
PictureBox1.Image = CheckImage(myImage)


''' <summary>Die Routine prüft ggf. Gif. Bei einem GDI+Framefehler wird der
''' erste verfügbare Frame (oder Nothing) zurückgegeben, sonst das gegebene 
''' Frame</summary>
''' <param name="img">das zu prüfende Bild</param>
Private Function CheckImage(ByVal img As Image) As Image
 
   'Picturebox verliert Displayfähigkeit, wenn animierte GIFs mit
   'fehlerhaften (?) Frames angezeigt werden sollen
 
   If Not img.RawFormat.Equals(Imaging.ImageFormat.Gif) Then Return img
 
   Dim fc As Integer = img.GetFrameCount(Imaging.FrameDimension.Time)
 
   Dim frame As Image = Nothing, ok As Boolean = True
 
   For i As Integer = 0 To fc - 1
      Try
         If img.SelectActiveFrame(Imaging.FrameDimension.Time, i) = 0 Then
            If frame Is Nothing Then
               frame = New Bitmap(img)
 
               Using g As Graphics = Graphics.FromImage(frame), _
                  br As New SolidBrush(Color.Red), _
                  brb As New SolidBrush(Color.White)
 
                  Dim f As New Font("Arial", 8)
                  Dim t As String = "GIF anim." & vbNewLine & "blocked"
                  Dim sz As SizeF = g.MeasureString(t, f)
 
                  g.FillRectangle(brb, 2, 2, sz.Width + 2, sz.Height + 2)
                  g.DrawString(t, f, br, 2, 2)
               End Using
            End If
         End If
      Catch ex As Exception
         ok = False
      End Try
 
      If Not ok And frame IsNot Nothing Then Return frame
   Next i
 
   If ok Then Return img 'Alle Frames sind verfügbar
   Return frame
End Function
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Animierte GIFs: Picturebox trifft auf Grenzen2.123Manfred X18.09.14 10:56
Re: Animierte GIFs: Picturebox trifft auf Grenzen1.394cookstdu18.09.14 12:53
Re: Animierte GIFs: Picturebox trifft auf Grenzen1.382Manfred X18.09.14 13:52
Re: Animierte GIFs: Picturebox trifft auf Grenzen1.377Manfred X18.09.14 15:05
Workaround,vorläufig1.323Manfred X19.09.14 09:38
Re: Animierte GIFs: Picturebox trifft auf Grenzen1.470Kuno6021.09.14 13:21
ImageAnimator trifft auf Grenzen1.330Manfred X22.09.14 09:40
Re: ImageAnimator trifft auf Grenzen1.344Kuno6022.09.14 12:27
Re: ImageAnimator trifft auf Grenzen1.345Manfred X22.09.14 13:40
Re: ImageAnimator trifft auf Grenzen1.393Kuno6022.09.14 14:32

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel