static class 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>
public static void AddImageStrip(this ImageList il, Image value, StripDirection direction, bool isQuadSize)
{
//Fehlerbehandlung übernimmt eine Überladung dieser Methode
int val1 = 0, val2 = 0;
if (isQuadSize)//Teilbilder sind Quadratisch
if (direction == StripDirection.Horizontal)
{
val1 = value.Width;
val2 = value.Height;
}
else
{
val1 = value.Height;
val2 = value.Width;
}
else//Größe an der ImageSize-Eigenschaft festlegen
if (direction == StripDirection.Horizontal)
{
val1 = value.Width;
val2 = il.ImageSize.Width;
}
else
{
val1 = value.Height;
val2 = il.ImageSize.Height;
}
//erste Fehlerfindung
if ((direction == StripDirection.Horizontal && (double)value.Width / (double)il.ImageSize.Width != (int)((double)value.Width / (double)il.ImageSize.Width))
|| direction == StripDirection.Vertical && (double)value.Height / (double)il.ImageSize.Height != (int)((double)value.Height / (double)il.ImageSize.Height))
throw new ArgumentException("value", "Size do not match the image.");
AddImageStrip(il, value, direction, val1 / val2);
}
/// <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>
public static void AddImageStrip(this ImageList il, Image value, StripDirection direction, int items)
{
if (value == null)//Fehler...
throw new ArgumentNullException("value");
if (items <= 0 || (items > value.Height && direction == StripDirection.Vertical) || (items > value.Width && direction == StripDirection.Horizontal))
throw new ArgumentOutOfRangeException("items");
if (direction != StripDirection.Horizontal && direction != StripDirection.Vertical)
throw new ArgumentException("direction");
if (direction == StripDirection.Vertical)//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);
for (int i = 0; i < items; ++i)
if (direction == StripDirection.Vertical)//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)));
}
/// <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>
public static Bitmap CropImage(this Image value, Rectangle cropArea)
{
if (cropArea.Left < 0 || cropArea.Top < 0 || cropArea.Right > value.Width || cropArea.Bottom > value.Height)//Fehler...
throw new ArgumentException("cropArea");
if (value == null)
throw new ArgumentNullException("value");
return new Bitmap(value).Clone(cropArea, value.PixelFormat);
}
/// <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,
}
}