Click here to Skip to main content
15,891,136 members
Articles / Multimedia / GDI+

Steganography 12 - Regions with different data density

Rate me:
Please Sign up or sign in to vote.
4.81/5 (26 votes)
12 Jul 2006CPOL6 min read 114K   2.5K   61  
Define regions inside an image to keep smooth colours free from hidden data.
/*
 * Created by SharpDevelop.
 * User: coco
 * Date: 22.07.2004
 * Time: 20:19
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */

using System;
using System.Collections;

namespace SteganoRegion
{
    /// <summary>
    ///     <para>
    ///       A collection that stores <see cref='.RegionInfoListItem'/> objects.
    ///    </para>
    /// </summary>
    /// <seealso cref='.RegionInfoListItemCollection'/>
    [Serializable()]
    public class RegionInfoListItemCollection : CollectionBase
    {

        /// <summary>
        ///     <para>
        ///       Initializes a new instance of <see cref='.RegionInfoListItemCollection'/>.
        ///    </para>
        /// </summary>
        public RegionInfoListItemCollection()
        {
        }

        /// <summary>
        ///     <para>
        ///       Initializes a new instance of <see cref='.RegionInfoListItemCollection'/> based on another <see cref='.RegionInfoListItemCollection'/>.
        ///    </para>
        /// </summary>
        /// <param name='value'>
        ///       A <see cref='.RegionInfoListItemCollection'/> from which the contents are copied
        /// </param>
        public RegionInfoListItemCollection(RegionInfoListItemCollection val)
        {
            this.AddRange(val);
        }

        /// <summary>
        ///     <para>
        ///       Initializes a new instance of <see cref='.RegionInfoListItemCollection'/> containing any array of <see cref='.RegionInfoListItem'/> objects.
        ///    </para>
        /// </summary>
        /// <param name='value'>
        ///       A array of <see cref='.RegionInfoListItem'/> objects with which to intialize the collection
        /// </param>
        public RegionInfoListItemCollection(RegionInfoListItem[] val)
        {
            this.AddRange(val);
        }

        /// <summary>
        /// <para>Represents the entry at the specified index of the <see cref='.RegionInfoListItem'/>.</para>
        /// </summary>
        /// <param name='index'><para>The zero-based index of the entry to locate in the collection.</para></param>
        /// <value>
        ///    <para> The entry at the specified index of the collection.</para>
        /// </value>
        /// <exception cref='System.ArgumentOutOfRangeException'><paramref name='index'/> is outside the valid range of indexes for the collection.</exception>
        public RegionInfoListItem this[int index]
        {
            get
            {
                return ((RegionInfoListItem)(List[index]));
            }
            set
            {
                List[index] = value;
            }
        }

        /// <summary>
        ///    <para>Adds a <see cref='.RegionInfoListItem'/> with the specified value to the 
        ///    <see cref='.RegionInfoListItemCollection'/> .</para>
        /// </summary>
        /// <param name='value'>The <see cref='.RegionInfoListItem'/> to add.</param>
        /// <returns>
        ///    <para>The index at which the new element was inserted.</para>
        /// </returns>
        /// <seealso cref='.RegionInfoListItemCollection.AddRange'/>
        public int Add(RegionInfoListItem val)
        {
            return List.Add(val);
        }

        /// <summary>
        /// <para>Copies the elements of an array to the end of the <see cref='.RegionInfoListItemCollection'/>.</para>
        /// </summary>
        /// <param name='value'>
        ///    An array of type <see cref='.RegionInfoListItem'/> containing the objects to add to the collection.
        /// </param>
        /// <returns>
        ///   <para>None.</para>
        /// </returns>
        /// <seealso cref='.RegionInfoListItemCollection.Add'/>
        public void AddRange(RegionInfoListItem[] val)
        {
            for (int i = 0; i < val.Length; i++)
            {
                this.Add(val[i]);
            }
        }

        /// <summary>
        ///     <para>
        ///       Adds the contents of another <see cref='.RegionInfoListItemCollection'/> to the end of the collection.
        ///    </para>
        /// </summary>
        /// <param name='value'>
        ///    A <see cref='.RegionInfoListItemCollection'/> containing the objects to add to the collection.
        /// </param>
        /// <returns>
        ///   <para>None.</para>
        /// </returns>
        /// <seealso cref='.RegionInfoListItemCollection.Add'/>
        public void AddRange(RegionInfoListItemCollection val)
        {
            for (int i = 0; i < val.Count; i++)
            {
                this.Add(val[i]);
            }
        }

        /// <summary>
        /// <para>Gets a value indicating whether the 
        ///    <see cref='.RegionInfoListItemCollection'/> contains the specified <see cref='.RegionInfoListItem'/>.</para>
        /// </summary>
        /// <param name='value'>The <see cref='.RegionInfoListItem'/> to locate.</param>
        /// <returns>
        /// <para><see langword='true'/> if the <see cref='.RegionInfoListItem'/> is contained in the collection; 
        ///   otherwise, <see langword='false'/>.</para>
        /// </returns>
        /// <seealso cref='.RegionInfoListItemCollection.IndexOf'/>
        public bool Contains(RegionInfoListItem val)
        {
            return List.Contains(val);
        }

        /// <summary>
        /// <para>Copies the <see cref='.RegionInfoListItemCollection'/> values to a one-dimensional <see cref='System.Array'/> instance at the 
        ///    specified index.</para>
        /// </summary>
        /// <param name='array'><para>The one-dimensional <see cref='System.Array'/> that is the destination of the values copied from <see cref='.RegionInfoListItemCollection'/> .</para></param>
        /// <param name='index'>The index in <paramref name='array'/> where copying begins.</param>
        /// <returns>
        ///   <para>None.</para>
        /// </returns>
        /// <exception cref='System.ArgumentException'><para><paramref name='array'/> is multidimensional.</para> <para>-or-</para> <para>The number of elements in the <see cref='.RegionInfoListItemCollection'/> is greater than the available space between <paramref name='arrayIndex'/> and the end of <paramref name='array'/>.</para></exception>
        /// <exception cref='System.ArgumentNullException'><paramref name='array'/> is <see langword='null'/>. </exception>
        /// <exception cref='System.ArgumentOutOfRangeException'><paramref name='arrayIndex'/> is less than <paramref name='array'/>'s lowbound. </exception>
        /// <seealso cref='System.Array'/>
        public void CopyTo(RegionInfoListItem[] array, int index)
        {
            List.CopyTo(array, index);
        }

        /// <summary>
        ///    <para>Returns the index of a <see cref='.RegionInfoListItem'/> in 
        ///       the <see cref='.RegionInfoListItemCollection'/> .</para>
        /// </summary>
        /// <param name='value'>The <see cref='.RegionInfoListItem'/> to locate.</param>
        /// <returns>
        /// <para>The index of the <see cref='.RegionInfoListItem'/> of <paramref name='value'/> in the 
        /// <see cref='.RegionInfoListItemCollection'/>, if found; otherwise, -1.</para>
        /// </returns>
        /// <seealso cref='.RegionInfoListItemCollection.Contains'/>
        public int IndexOf(RegionInfoListItem val)
        {
            return List.IndexOf(val);
        }

        /// <summary>
        /// <para>Inserts a <see cref='.RegionInfoListItem'/> into the <see cref='.RegionInfoListItemCollection'/> at the specified index.</para>
        /// </summary>
        /// <param name='index'>The zero-based index where <paramref name='value'/> should be inserted.</param>
        /// <param name=' value'>The <see cref='.RegionInfoListItem'/> to insert.</param>
        /// <returns><para>None.</para></returns>
        /// <seealso cref='.RegionInfoListItemCollection.Add'/>
        public void Insert(int index, RegionInfoListItem val)
        {
            List.Insert(index, val);
        }

        /// <summary>
        ///    <para>Returns an enumerator that can iterate through 
        ///       the <see cref='.RegionInfoListItemCollection'/> .</para>
        /// </summary>
        /// <returns><para>None.</para></returns>
        /// <seealso cref='System.Collections.IEnumerator'/>
        public new RegionInfoListItemEnumerator GetEnumerator()
        {
            return new RegionInfoListItemEnumerator(this);
        }

        /// <summary>
        ///    <para> Removes a specific <see cref='.RegionInfoListItem'/> from the 
        ///    <see cref='.RegionInfoListItemCollection'/> .</para>
        /// </summary>
        /// <param name='value'>The <see cref='.RegionInfoListItem'/> to remove from the <see cref='.RegionInfoListItemCollection'/> .</param>
        /// <returns><para>None.</para></returns>
        /// <exception cref='System.ArgumentException'><paramref name='value'/> is not found in the Collection. </exception>
        public void Remove(RegionInfoListItem val)
        {
            List.Remove(val);
        }

        public class RegionInfoListItemEnumerator : IEnumerator
        {
            IEnumerator baseEnumerator;
            IEnumerable temp;

            public RegionInfoListItemEnumerator(RegionInfoListItemCollection mappings)
            {
                this.temp = ((IEnumerable)(mappings));
                this.baseEnumerator = temp.GetEnumerator();
            }

            public RegionInfoListItem Current
            {
                get
                {
                    return ((RegionInfoListItem)(baseEnumerator.Current));
                }
            }

            object IEnumerator.Current
            {
                get
                {
                    return baseEnumerator.Current;
                }
            }

            public bool MoveNext()
            {
                return baseEnumerator.MoveNext();
            }

            bool IEnumerator.MoveNext()
            {
                return baseEnumerator.MoveNext();
            }

            public void Reset()
            {
                baseEnumerator.Reset();
            }

            void IEnumerator.Reset()
            {
                baseEnumerator.Reset();
            }
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
Germany Germany
Corinna lives in Hanover/Germany and works as a C# developer.

Comments and Discussions