1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Nutzen von Toolbar-Images

Dieses Thema im Forum ".NET WPF & Silverlight" wurde erstellt von MarioR, 1. September 2013.

  1. MarioR

    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
     
  2. MarioR

    MarioR Mitglied

    So hab mir eine kleine Klasse geschrieben:

    Code (Text):
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Drawing;
    6.  
    7.     /// <summary>Implementation für eine ImageList</summary>
    8.     public class MyImageList
    9.     {
    10.         #region Eigenschaften
    11.         /// <summary>Die Bilder</summary>
    12.         private List<Bitmap> pictures;
    13.         /// <summary>Transparente Farbe</summary>
    14.         private Color transparentColor;
    15.         /// <summary>Das Bitmap mit der Bilderleiste</summary>
    16.         private Bitmap listImage;
    17.         /// <summary>Das Bitmap mit der BilderleisteMaske (kann null sein)</summary>
    18.         private Bitmap listMask;
    19.         /// <summary>Breite für 1 Bild</summary>
    20.         private Int32 imageWidth;
    21.         /// <summary>Höhe für 1 Bild</summary>
    22.         private Int32 imageHeight;
    23.         /// <summary>Anzahl der Bilder in der Leiste(wird berechnet)</summary>
    24.         private Int32 countPics;
    25.         #endregion Eigenschaften
    26.  
    27.         #region Properties
    28.         /// <summary>Breite für 1 Bild</summary>
    29.         public Int32 ImageWidth
    30.         {
    31.             get { return imageWidth; }
    32.         }
    33.         /// <summary>Höhe für 1 Bild</summary>
    34.         public Int32 ImageHeight
    35.         {
    36.             get { return imageHeight; }
    37.         }
    38.         /// <summary>Die Bilder</summary>
    39.         public List<Bitmap> Pictures
    40.         {
    41.             get { return pictures; }
    42.         }
    43.         /// <summary>Transparente Farbe</summary>
    44.         public Color TransparentColor
    45.         {
    46.             get { return transparentColor; }
    47.         }
    48.         #endregion Properties
    49.  
    50.         #region Konstruktoren
    51.         /// <summary>Konstruktor Breite eines Bildes = Höhe</summary>
    52.         /// <param name="listImage">Die BilderLeiste</param>
    53.         /// <param name="listMask">Optional eine Maske für die Transparenz(kann null sein)</param>
    54.         public MyImageList(Bitmap listImage, Bitmap listMask)
    55.         {
    56.             if (listImage == null) throw new ArgumentNullException("listImage darf nicht null sein");
    57.             this.listImage = listImage;
    58.             this.listMask = listMask;
    59.             if (this.listMask != null)
    60.             {
    61.                 if (this.listMask.Height != this.listImage.Height)
    62.                     throw new ArgumentException("listImage und listMask müssen die gleiche Höhe besitzen");
    63.                 if (this.listMask.Width != this.listImage.Width)
    64.                     throw new ArgumentException("listImage und listMask müssen die gleiche Breite besitzen");
    65.             }
    66.             this.imageHeight = this.listImage.Height;
    67.             this.imageWidth = this.listImage.Height;
    68.  
    69.             Double count = ((double)this.listImage.Width) / ((double)this.listImage.Height);
    70.             if (count != Math.Truncate(count))
    71.                 throw new ArgumentException("listImage die Breite ist nicht ein Ganzes-Vielfaches der Höhe! (" + count.ToString() + ")");
    72.             this.countPics = (Int32)count;
    73.  
    74.             this.pictures = new List<Bitmap>();
    75.             for (Int32 i = 0; i < count; i++)
    76.             {
    77.                 Bitmap newPic = new Bitmap(imageWidth, imageHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
    78.                 newPic.SetResolution(listImage.HorizontalResolution, listImage.VerticalResolution);
    79.                 Graphics grapic = Graphics.FromImage(newPic);
    80.                 grapic.PageUnit = GraphicsUnit.Pixel;
    81.                 Rectangle crop = new Rectangle(i * imageWidth, 0, imageWidth, imageHeight);
    82.                 grapic.DrawImage(listImage, 0, 0, crop, GraphicsUnit.Pixel);
    83.  
    84.                 Bitmap mask = new Bitmap(imageWidth, imageHeight, listMask.PixelFormat);
    85.                 mask.SetResolution(listMask.HorizontalResolution, listMask.VerticalResolution);
    86.                 Graphics maskGraphics = Graphics.FromImage(mask);
    87.                 maskGraphics.DrawImage(listMask, 0, 0, crop, GraphicsUnit.Pixel);
    88.                 Color newPicPixel;
    89.                 for (Int32 x = 0; x < this.imageWidth; x++)
    90.                 {
    91.                     for (Int32 y = 0; y < this.imageHeight; y++)
    92.                     {
    93.                         newPicPixel = newPic.GetPixel(x, y);
    94.                         newPic.SetPixel(x, y, Color.FromArgb(255 - mask.GetPixel(x, y).R, newPicPixel.R, newPicPixel.G, newPicPixel.B));
    95.                     }
    96.                 }
    97.  
    98.                 pictures.Add(newPic);
    99.             }
    100.         }
    101.         /// <summary>Konstruktor Breite eines Bildes = Höhe</summary>
    102.         /// <param name="listImage">Die BilderLeiste</param>
    103.         public MyImageList(Bitmap listImage)
    104.         {
    105.             if (listImage == null) throw new ArgumentNullException("listImage darf nicht null sein");
    106.             this.listImage = listImage;
    107.  
    108.             this.imageHeight = this.listImage.Height;
    109.             this.imageWidth = this.listImage.Height;
    110.  
    111.             Double count = ((double)this.listImage.Width) / ((double)this.listImage.Height);
    112.             if (count != Math.Truncate(count))
    113.                 throw new ArgumentException("listImage die Breite ist nicht ein Ganzes-Vielfaches der Höhe! (" + count.ToString() + ")");
    114.             this.countPics = (Int32)count;
    115.             this.pictures = new List<Bitmap>();
    116.             for (Int32 i = 0; i < count; i++)
    117.             {
    118.                 Bitmap newPic = new Bitmap(imageWidth, imageHeight);
    119.                 Graphics grapic = Graphics.FromImage(newPic);
    120.                 grapic.DrawImage(listImage, i * imageWidth, 0, imageWidth, imageHeight);
    121.                 pictures.Add(newPic);
    122.             }
    123.         }
    124.         /// <summary>Konstruktor Breite eines Bildes = Höhe</summary>
    125.         /// <param name="listImage">Die BilderLeiste</param>
    126.         /// <param name="x">x,y = Koordinten des Pixels mit der Transparenten Farbe</param>
    127.         /// <param name="y">x,y = Koordinten des Pixels mit der Transparenten Farbe</param>
    128.         public MyImageList(Bitmap listImage, Int32 x, Int32 y)
    129.         {
    130.             if (listImage == null) throw new ArgumentNullException("listImage darf nicht null sein");
    131.             this.listImage = listImage;
    132.  
    133.             this.imageHeight = this.listImage.Height;
    134.             this.imageWidth = this.listImage.Height;
    135.             this.transparentColor = this.listImage.GetPixel(x, y);
    136.             Double count = ((double)this.listImage.Width) / ((double)this.listImage.Height);
    137.             if (count != Math.Truncate(count))
    138.                 throw new ArgumentException("listImage die Breite ist nicht ein Ganzes-Vielfaches der Höhe! (" + count.ToString() + ")");
    139.             this.countPics = (Int32)count;
    140.             this.pictures = new List<Bitmap>();
    141.             for (Int32 i = 0; i < count; i++)
    142.             {
    143.                 Bitmap newPic = new Bitmap(imageWidth, imageHeight, listImage.PixelFormat);
    144.                 newPic.SetResolution(listImage.HorizontalResolution, listImage.VerticalResolution);
    145.                 Graphics grapic = Graphics.FromImage(newPic);
    146.                 grapic.PageUnit = GraphicsUnit.Pixel;
    147.                 Rectangle crop = new Rectangle(i * imageWidth, 0, imageWidth, imageHeight);
    148.                 grapic.DrawImage(listImage, 0, 0, crop, GraphicsUnit.Pixel);
    149.                 newPic.MakeTransparent(this.transparentColor);
    150.                 pictures.Add(newPic);
    151.             }
    152.         }
    153.         /// <summary>Konstruktor Breite eines Bildes = Höhe</summary>
    154.         /// <param name="listImage">Die BilderLeiste</param>
    155.         /// <param name="transparentColor">transparente Farbe</param>
    156.         public MyImageList(Bitmap listImage, Color transparentColor)
    157.         {
    158.             if (listImage == null) throw new ArgumentNullException("listImage darf nicht null sein");
    159.             this.listImage = listImage;
    160.             this.imageHeight = this.listImage.Height;
    161.             this.imageWidth = this.listImage.Height;
    162.             this.transparentColor = transparentColor;
    163.             Double count = ((double)this.listImage.Width) / ((double)this.listImage.Height);
    164.             if (count != Math.Truncate(count))
    165.                 throw new ArgumentException("listImage die Breite ist nicht ein Ganzes-Vielfaches der Höhe! (" + count.ToString() + ")");
    166.             this.countPics = (Int32)count;
    167.             this.pictures = new List<Bitmap>();
    168.             for (Int32 i = 0; i < count; i++)
    169.             {
    170.                 Bitmap newPic = new Bitmap(imageWidth, imageHeight, listImage.PixelFormat);
    171.                 newPic.SetResolution(listImage.HorizontalResolution, listImage.VerticalResolution);
    172.                 Graphics grapic = Graphics.FromImage(newPic);
    173.                 grapic.PageUnit = GraphicsUnit.Pixel;
    174.                 Rectangle crop = new Rectangle(i * imageWidth, 0, imageWidth, imageHeight);
    175.                 grapic.DrawImage(listImage, 0, 0, crop, GraphicsUnit.Pixel);
    176.                 newPic.MakeTransparent(this.transparentColor);
    177.                 pictures.Add(newPic);
    178.             }
    179.         }
    180.         #endregion Konstruktoren
    181.  
    182.         #region Methoden
    183.         #endregion Methoden
    184.     }
     
  3. Spyke

    Spyke Capoeirista Premium-User

    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.
     
Die Seite wird geladen...
Ähnliche Themen - Nutzen Toolbar Images
  1. Meldur
    Antworten:
    0
    Aufrufe:
    1.521