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
}