using System.Drawing;
using System.Drawing.Imaging;
namespace Developpez.Dotnet.Drawing
{
///
/// Fournit des méthodes d'extension pour la manipulation d'images Bitmap
///
public static class BitmapExtensions
{
///
/// Rogne l'image d'origine en ne conservant que la zone spécifiée, et renvoie la nouvelle image
///
/// L'image à rogner
/// La zone de l'image à conserver
/// L'image rognée
public static Bitmap Crop(this Bitmap bitmap, Rectangle cropRectangle)
{
return bitmap.Clone(cropRectangle, bitmap.PixelFormat);
}
///
/// Rogne l'image d'origine en ne conservant que la zone spécifiée, et renvoie la nouvelle image
///
/// L'image à rogner
/// La zone de l'image à conserver
/// L'image rognée
public static Bitmap Crop(this Bitmap bitmap, RectangleF cropRectangle)
{
return bitmap.Clone(cropRectangle, bitmap.PixelFormat);
}
///
/// Rogne l'image d'origine en ne conservant que la zone spécifiée, et renvoie la nouvelle image
///
/// L'image à rogner
/// La position horizontale de la zone à conserver
/// La position verticale de la zone à conserver
/// La largeur de la zone à conserver
/// La hauteur de la zone à conserver
/// L'image rognée
public static Bitmap Crop(this Bitmap bitmap, int x, int y, int width, int height)
{
Rectangle cropRectangle = new Rectangle(x, y, width, height);
return bitmap.Crop(cropRectangle);
}
///
/// Rogne l'image d'origine en ne conservant que la zone spécifiée, et renvoie la nouvelle image
///
/// L'image à rogner
/// La position horizontale de la zone à conserver
/// La position verticale de la zone à conserver
/// La largeur de la zone à conserver
/// La hauteur de la zone à conserver
/// L'image rognée
public static Bitmap Crop(this Bitmap bitmap, float x, float y, float width, float height)
{
RectangleF cropRectangle = new RectangleF(x, y, width, height);
return bitmap.Crop(cropRectangle);
}
///
/// Enlève la transparence d'une image en la plaçant sur un fond de la couleur spécifiée
///
/// Image dont on veut enlever la transparence
/// Couleur de fond à utiliser
/// L'image d'origine placée sur un fond de la couleur spécifiée
public static Image RemoveTransparency(this Image image, Color background)
{
var newImage = new Bitmap(image.Width, image.Height);
using (var g = Graphics.FromImage(newImage))
{
g.Clear(background);
g.DrawImage(image, Point.Empty);
}
return newImage;
}
///
/// Applique une matrice de transformation de couleurs à l'image.
///
/// L'image à transformer
/// La matrice de transformation de couleurs
/// L'image transformée.
public static Image TransformColors(this Image image, ColorMatrix colorMatrix)
{
Bitmap newBitmap = new Bitmap(image.Width, image.Height);
using (Graphics g = Graphics.FromImage(newBitmap))
{
ImageAttributes attributes = new ImageAttributes();
attributes.SetColorMatrix(colorMatrix);
g.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height), 0, 0, image.Width, image.Height,
GraphicsUnit.Pixel, attributes);
}
return newBitmap;
}
///
/// Verrouille une image Bitmap dans la mémoire système et fournit un objet PixelData
/// permettant l'accès aux données des pixels.
///
/// Image bitmap à verrouiller
/// Niveau d'accès (lecture/écriture) de la zone verrouillée
/// Un objet PixelData pour accéder aux données des pixels.
public static PixelData LockPixels(this Bitmap bitmap, ImageLockMode flags)
{
return LockPixels(bitmap, new Rectangle(Point.Empty, bitmap.Size), flags);
}
///
/// Verrouille une image Bitmap dans la mémoire système et fournit un objet PixelData
/// permettant l'accès aux données des pixels.
///
/// Image bitmap à verrouiller
/// Zone de l'image à verrouiller
/// Niveau d'accès (lecture/écriture) de la zone verrouillée
/// Un objet PixelData pour accéder aux données des pixels.
public static PixelData LockPixels(this Bitmap bitmap, Rectangle rect, ImageLockMode flags)
{
return new PixelData(bitmap, rect, flags);
}
}
}