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.
 

Neue Beiträge

Zurück