Feedback

VB - Bildband in ImageList laden

Veröffentlicht von am 30.04.2013
(2 Bewertungen)
Meines Wissens nach gibt es keine Methode im Standart .NET, die eine Bilddatei als Bildband vertikal laden kann. Darum habe ich diese angefangen zu schreiben.

Diese Methoden können ein Bildband mit horizontaler und vertikaler Ausrichtung laden. Zusätzlich kann angegeben werden, als wie viele Bilder das Bildband ausgelsen werden soll. Alternativ kann die Bildgröße auf "Quadratisch" gesetzt werden oder anhand der ImageSize-Eigenschaft bestimmt werden.

Wenn eine Auslesemöglichkeit nicht richtig funktionieren sollte (konnte leider nicht alles testen), dann diese Bitte mit dem vollständigen Aufruf in die Kommentare, danke :)

Hinweis: Aufgrund eines Fehlers im Übersetzer der Codesnippets habe ich das Snippet zusätzlich in VB.NET gepostet, das Original in C# gibt es hier:
http://dotnet-snippets.de/snippet/bildband-in-imagelist-laden/1707
Snippet in C# übersetzen
Module Extensions
    ''' <summary>
    ''' Fügt Bilder eines Bildbandes zu der ImageList hinzu.
    ''' </summary>
    ''' <paramref name="il">Die zu editierende ImageList.</paramref>
    ''' <param name="value">Der Bildstreifen.</param>
    ''' <param name="direction">Die Ausrichtung des Bildbandes.</param>
    ''' <param name="isQuadSize"><c>True</c>, wenn die Teilbilder quadratisch sind, andernfalls <c>False</c>. Wird <c>False</c> übergeben wird die <c>ImageSize</c>-Eigenschaft zur Größenbestimmung genutzt.</param>
    ''' <exception cref="System.ArgumentNullException">Wird ausgelöst, wenn <c>value</c> <c>null</c> ist</exception>
    ''' <exception cref="System.ArgumentOutOfRangeException">Wird ausgelöst, wenn <c>items</c> kleiner gleich 0 ist oder größer als die Anzahl der Pixel von Value in der angegebenen Ausrichtung.</exception>
    ''' <exception cref="System.ArgumentException">Wird ausgelöst, wenn <c>direction</c> einen ungültigen Wert hat oder wenn die Höhe und die Breite nicht entsprechend der Ausrichtung durch einander teilbar sind bzw. keine Quadratischen Bilder entstehen würden.</exception>
    <System.Runtime.CompilerServices.Extension> _
    Public Sub AddImageStrip(il As ImageList, value As Image, direction As StripDirection, isQuadSize As Boolean)
        'Fehlerbehandlung übernimmt eine Überladung dieser Methode
        Dim val1 As Integer = 0, val2 As Integer = 0

        If isQuadSize Then
            'Teilbilder sind Quadratisch
            If direction = StripDirection.Horizontal Then
                val1 = value.Width
                val2 = value.Height
            Else
                val1 = value.Height
                val2 = value.Width
            End If
            'Größe an der ImageSize-Eigenschaft festlegen
        ElseIf direction = StripDirection.Horizontal Then
            val1 = value.Width
            val2 = il.ImageSize.Width
        Else
            val1 = value.Height
            val2 = il.ImageSize.Height
        End If

        'erste Fehlerfindung
        If (direction = StripDirection.Horizontal AndAlso CDbl(value.Width) / CDbl(il.ImageSize.Width) <> CInt(Math.Truncate(CDbl(value.Width) / CDbl(il.ImageSize.Width)))) OrElse direction = StripDirection.Vertical AndAlso CDbl(value.Height) / CDbl(il.ImageSize.Height) <> CInt(Math.Truncate(CDbl(value.Height) / CDbl(il.ImageSize.Height))) Then
            Throw New ArgumentException("value", "Size do not match the image.")
        End If

        AddImageStrip(il, value, direction, val1 \ val2)

    End Sub

    ''' <summary>
    ''' Fügt Bilder eines Bildbandes zu der ImageList hinzu.
    ''' </summary>
    ''' <paramref name="il">Die zu editierende ImageList.</paramref>
    ''' <param name="value">Der Bildstreifen.</param>
    ''' <param name="direction">Die Ausrichtung des Bildbandes.</param>
    ''' <param name="items">Die Anzahl der einzelnen Elemente in dem Bildstreifen.</param>
    ''' <exception cref="System.ArgumentNullException">Wird ausgelöst, wenn <c>value</c> <c>null</c> ist</exception>
    ''' <exception cref="System.ArgumentOutOfRangeException">Wird ausgelöst, wenn <c>items</c> kleiner gleich 0 ist oder größer als die Anzahl der Pixel von Value in der angegebenen Ausrichtung.</exception>
    ''' <exception cref="System.ArgumentException">Wird ausgelöst, wenn <c>direction</c> einen ungültigen Wert hat.</exception>
    <System.Runtime.CompilerServices.Extension> _
    Public Sub AddImageStrip(il As ImageList, value As Image, direction As StripDirection, items As Integer)
        If value Is Nothing Then
            'Fehler...
            Throw New ArgumentNullException("value")
        End If
        If items <= 0 OrElse (items > value.Height AndAlso direction = StripDirection.Vertical) OrElse (items > value.Width AndAlso direction = StripDirection.Horizontal) Then
            Throw New ArgumentOutOfRangeException("items")
        End If
        If direction <> StripDirection.Horizontal AndAlso direction <> StripDirection.Vertical Then
            Throw New ArgumentException("direction")
        End If

        If direction = StripDirection.Vertical Then
            'Größe der Bilder festlegen
            il.ImageSize = New System.Drawing.Size(value.Width, value.Height / items)
        Else
            il.ImageSize = New System.Drawing.Size(value.Width / items, value.Height)
        End If

        For i As Integer = 0 To items - 1
            If direction = StripDirection.Vertical Then
                'Bilder zur Auflistung hinzufügen
                il.Images.Add(value.CropImage(New Rectangle(0, i * value.Height / items, value.Width, value.Height / items)))
            Else
                il.Images.Add(value.CropImage(New Rectangle(i * value.Width / items, 0, value.Width / items, value.Height)))
            End If
        Next
    End Sub

    ''' <summary>
    ''' Schneidet ein Teilstück eines Bildes aus
    ''' </summary>
    ''' <paramref name="value">Das ursprüngliche Bild.</paramref>
    ''' <param name="cropArea">Der Bereich des Bildes, der zurück gegeben werden soll.</param>
    ''' <returns>Das Teilstück des Bildes.</returns>
    ''' <exception cref="System.ArgumentException">Wird ausgelöst, wenn <c>cropArea</c> einen Wert beinhaltet, der außerhalb des Bildes liegt.</exception>
    ''' <exception cref="System.ArgumentNullException">Wird ausgelöst, wenn value <c>null</c> ist.</exception>
    <System.Runtime.CompilerServices.Extension> _
    Public Function CropImage(value As Image, cropArea As Rectangle) As Bitmap
        If cropArea.Left < 0 OrElse cropArea.Top < 0 OrElse cropArea.Right > value.Width OrElse cropArea.Bottom > value.Height Then
            'Fehler...
            Throw New ArgumentException("cropArea")
        End If
        If value Is Nothing Then
            Throw New ArgumentNullException("value")
        End If

        Return New Bitmap(value).Clone(cropArea, value.PixelFormat)
    End Function

    ''' <summary>
    ''' Stellt Ausrichtungen für ein Bildband dar.
    ''' </summary>
    Public Enum StripDirection
        ''' <summary>
        ''' Das Bildband ist vertikal ausgerichtet.
        ''' </summary>
        Vertical
        ''' <summary>
        ''' Das Bildband ist horizontal ausgerichtet.
        ''' </summary>
        Horizontal
    End Enum
End Module

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!