Feedback

C# - Bildband in ImageList laden

Veröffentlicht von am 4/30/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:
Der Übersetzer in VB.NET arbeitet nicht ganz richtig. Darum nachfolgend noch der Code in VB.NET:
http://dotnet-snippets.de/snippet/vb-net-bildband-in-imagelist-laden/1708
    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,
        }
    }

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!