Sprache: VB
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 🙂
[b]Hinweis:[/b] 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
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
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
Alte URL:
/snippet/bildband-in-imagelist-laden/1708