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); } } }