Nutzen von Toolbar-Images

MarioR

Mitglied
Hallo,

ich habe etliche ToolbarImages (Transparenz durch Farbe und Maske) z.B.:
[Transparent=mangenta]
LayerMangenta.png
[Icons]
LayerIcons.png
[Mask]
LayerIconsMask.png

a) Gibt es eine für C# eine Klasse die diese in Listen umsetzt?

Wenn nein, dann muss ich mir die Bilder zerteilen, dass sollte gehen.
aber:
b) Wie kann ich aus dem Icon und der zugehörigen Maske eine Transparenz erstellen?

Gruß Mario
 
So hab mir eine kleine Klasse geschrieben:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

    /// <summary>Implementation für eine ImageList</summary>
    public class MyImageList
    {
        #region Eigenschaften
        /// <summary>Die Bilder</summary>
        private List<Bitmap> pictures;
        /// <summary>Transparente Farbe</summary>
        private Color transparentColor;
        /// <summary>Das Bitmap mit der Bilderleiste</summary>
        private Bitmap listImage;
        /// <summary>Das Bitmap mit der BilderleisteMaske (kann null sein)</summary>
        private Bitmap listMask;
        /// <summary>Breite für 1 Bild</summary>
        private Int32 imageWidth;
        /// <summary>Höhe für 1 Bild</summary>
        private Int32 imageHeight;
        /// <summary>Anzahl der Bilder in der Leiste(wird berechnet)</summary>
        private Int32 countPics;
        #endregion Eigenschaften

        #region Properties
        /// <summary>Breite für 1 Bild</summary>
        public Int32 ImageWidth
        {
            get { return imageWidth; }
        }
        /// <summary>Höhe für 1 Bild</summary>
        public Int32 ImageHeight
        {
            get { return imageHeight; }
        }
        /// <summary>Die Bilder</summary>
        public List<Bitmap> Pictures
        {
            get { return pictures; }
        }
        /// <summary>Transparente Farbe</summary>
        public Color TransparentColor
        {
            get { return transparentColor; }
        }
        #endregion Properties

        #region Konstruktoren
        /// <summary>Konstruktor Breite eines Bildes = Höhe</summary>
        /// <param name="listImage">Die BilderLeiste</param>
        /// <param name="listMask">Optional eine Maske für die Transparenz(kann null sein)</param>
        public MyImageList(Bitmap listImage, Bitmap listMask)
        {
            if (listImage == null) throw new ArgumentNullException("listImage darf nicht null sein");
            this.listImage = listImage;
            this.listMask = listMask;
            if (this.listMask != null)
            {
                if (this.listMask.Height != this.listImage.Height)
                    throw new ArgumentException("listImage und listMask müssen die gleiche Höhe besitzen");
                if (this.listMask.Width != this.listImage.Width)
                    throw new ArgumentException("listImage und listMask müssen die gleiche Breite besitzen");
            }
            this.imageHeight = this.listImage.Height;
            this.imageWidth = this.listImage.Height;

            Double count = ((double)this.listImage.Width) / ((double)this.listImage.Height);
            if (count != Math.Truncate(count))
                throw new ArgumentException("listImage die Breite ist nicht ein Ganzes-Vielfaches der Höhe! (" + count.ToString() + ")");
            this.countPics = (Int32)count;

            this.pictures = new List<Bitmap>();
            for (Int32 i = 0; i < count; i++)
            {
                Bitmap newPic = new Bitmap(imageWidth, imageHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                newPic.SetResolution(listImage.HorizontalResolution, listImage.VerticalResolution);
                Graphics grapic = Graphics.FromImage(newPic);
                grapic.PageUnit = GraphicsUnit.Pixel;
                Rectangle crop = new Rectangle(i * imageWidth, 0, imageWidth, imageHeight);
                grapic.DrawImage(listImage, 0, 0, crop, GraphicsUnit.Pixel);

                Bitmap mask = new Bitmap(imageWidth, imageHeight, listMask.PixelFormat);
                mask.SetResolution(listMask.HorizontalResolution, listMask.VerticalResolution);
                Graphics maskGraphics = Graphics.FromImage(mask);
                maskGraphics.DrawImage(listMask, 0, 0, crop, GraphicsUnit.Pixel);
                Color newPicPixel;
                for (Int32 x = 0; x < this.imageWidth; x++)
                {
                    for (Int32 y = 0; y < this.imageHeight; y++)
                    {
                        newPicPixel = newPic.GetPixel(x, y);
                        newPic.SetPixel(x, y, Color.FromArgb(255 - mask.GetPixel(x, y).R, newPicPixel.R, newPicPixel.G, newPicPixel.B));
                    }
                }

                pictures.Add(newPic);
            }
        }
        /// <summary>Konstruktor Breite eines Bildes = Höhe</summary>
        /// <param name="listImage">Die BilderLeiste</param>
        public MyImageList(Bitmap listImage)
        {
            if (listImage == null) throw new ArgumentNullException("listImage darf nicht null sein");
            this.listImage = listImage;

            this.imageHeight = this.listImage.Height;
            this.imageWidth = this.listImage.Height;

            Double count = ((double)this.listImage.Width) / ((double)this.listImage.Height);
            if (count != Math.Truncate(count))
                throw new ArgumentException("listImage die Breite ist nicht ein Ganzes-Vielfaches der Höhe! (" + count.ToString() + ")");
            this.countPics = (Int32)count;
            this.pictures = new List<Bitmap>();
            for (Int32 i = 0; i < count; i++)
            {
                Bitmap newPic = new Bitmap(imageWidth, imageHeight);
                Graphics grapic = Graphics.FromImage(newPic);
                grapic.DrawImage(listImage, i * imageWidth, 0, imageWidth, imageHeight);
                pictures.Add(newPic);
            }
        }
        /// <summary>Konstruktor Breite eines Bildes = Höhe</summary>
        /// <param name="listImage">Die BilderLeiste</param>
        /// <param name="x">x,y = Koordinten des Pixels mit der Transparenten Farbe</param>
        /// <param name="y">x,y = Koordinten des Pixels mit der Transparenten Farbe</param>
        public MyImageList(Bitmap listImage, Int32 x, Int32 y)
        {
            if (listImage == null) throw new ArgumentNullException("listImage darf nicht null sein");
            this.listImage = listImage;

            this.imageHeight = this.listImage.Height;
            this.imageWidth = this.listImage.Height;
            this.transparentColor = this.listImage.GetPixel(x, y);
            Double count = ((double)this.listImage.Width) / ((double)this.listImage.Height);
            if (count != Math.Truncate(count))
                throw new ArgumentException("listImage die Breite ist nicht ein Ganzes-Vielfaches der Höhe! (" + count.ToString() + ")");
            this.countPics = (Int32)count;
            this.pictures = new List<Bitmap>();
            for (Int32 i = 0; i < count; i++)
            {
                Bitmap newPic = new Bitmap(imageWidth, imageHeight, listImage.PixelFormat);
                newPic.SetResolution(listImage.HorizontalResolution, listImage.VerticalResolution);
                Graphics grapic = Graphics.FromImage(newPic);
                grapic.PageUnit = GraphicsUnit.Pixel;
                Rectangle crop = new Rectangle(i * imageWidth, 0, imageWidth, imageHeight);
                grapic.DrawImage(listImage, 0, 0, crop, GraphicsUnit.Pixel);
                newPic.MakeTransparent(this.transparentColor);
                pictures.Add(newPic);
            }
        }
        /// <summary>Konstruktor Breite eines Bildes = Höhe</summary>
        /// <param name="listImage">Die BilderLeiste</param>
        /// <param name="transparentColor">transparente Farbe</param>
        public MyImageList(Bitmap listImage, Color transparentColor)
        {
            if (listImage == null) throw new ArgumentNullException("listImage darf nicht null sein");
            this.listImage = listImage;
            this.imageHeight = this.listImage.Height;
            this.imageWidth = this.listImage.Height;
            this.transparentColor = transparentColor;
            Double count = ((double)this.listImage.Width) / ((double)this.listImage.Height);
            if (count != Math.Truncate(count))
                throw new ArgumentException("listImage die Breite ist nicht ein Ganzes-Vielfaches der Höhe! (" + count.ToString() + ")");
            this.countPics = (Int32)count;
            this.pictures = new List<Bitmap>();
            for (Int32 i = 0; i < count; i++)
            {
                Bitmap newPic = new Bitmap(imageWidth, imageHeight, listImage.PixelFormat);
                newPic.SetResolution(listImage.HorizontalResolution, listImage.VerticalResolution);
                Graphics grapic = Graphics.FromImage(newPic);
                grapic.PageUnit = GraphicsUnit.Pixel;
                Rectangle crop = new Rectangle(i * imageWidth, 0, imageWidth, imageHeight);
                grapic.DrawImage(listImage, 0, 0, crop, GraphicsUnit.Pixel);
                newPic.MakeTransparent(this.transparentColor);
                pictures.Add(newPic);
            }
        }
        #endregion Konstruktoren

        #region Methoden
        #endregion Methoden
    }
 
Nur so interesse halber, warum solch ein Aufwand.
In der Regel bearbeite ich einfach schnell solche Bilder mit einem entsprechendem Bildbeabearbeitungsprogramm wenn sie meinen Ansprüchen nicht ganz genügen.
 
Zurück