Home

Introduction aux Bitmaps

 

Bitmaps Fundamentals

 

Introduction

Une bitmap est une représentation d'une image ou d'un autre type of graphique sur une fenêtre. Par exemple, il peut être utilisé pour montrer une image régulière sur un formulaire. Voici un example:

 

Bitmap

Practical LearningEtude Pratique: Introduisant les Bitmaps

  1. Demarrez Microsoft Visual C# et créez une nouvelle Application Windows nommée PictureViewer1
  2. Da la Boîte à Outils, cliquez Button et cliquez le formulaire
  3. Pendant que le button est encore sélectionné sur le formulaire, dans la fenêtre des Propriétés, changez ses charactéristiques comme suit:
    Text: Ouvrir une Photo
    (Name): btnOuvrirPhoto
     
    Aperçu d'Image
  4. Dans l'Explorateur de Solutions, si nécessaire, montrez le nom du projet.
    Sous Form1.cs, double-cliquez Form1.Designer.cs
  5. Declare deux global variables comme suit:
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace PictureViewer1
    {
        public partial class Form1 : Form
        {
            bool PhotoMise;
            string strPhoto;

La Classe Bitmap

Pour fournir un support aux bitmaps, la bibliothèque GDI+ fournit la classe Bitmap. Dans le .NET Framework, la bitmap est représentée par une classe appelée Bitmap. La classe Bitmap est dérivée de la classe abstracte Image. Les deux classes sont définies dans l'espace de nom System.Drawing de l'assemblée System.Drawing.dll. La classe Bitmap est sérializable.

Pour Obtenir une Bitmap

Il existe deux principales manières que vous pouvez utiliser pour obtenir une bitmap à utiliser dans votre application: vous pouvez utiliser une bitmap déjà créée ou vous pouvez concevoir la votre. Pour utiliser une bitmap existante, vous pouvez l'ouvrir comme un fichier. Pour supporter cette approche, la classe Bitmap fournit le constructeur suivant:

public Bitmap(string filename);

Ce constructeur prend comme argument le nom du fichier ou son chemin. Voici un exemple qui l'utilise:

private void btnPicture_Click(object sender, EventArgs e)
{
            Bitmap bmpPhoto = new Bitmap("femme.bmp");
}

En dehors de ce constructeur, Image, le parent de la classe Bitmap, fournit la méthode FromFile() à ses enfants. Cette méthode est fournie en deux versions. La première version utilise la syntaxe suivante:

public static Image FromFile(string filename);

Comme vous pouvez voir, c'est une méthode statique que vous appelez sans instantier la classe. La méthode prend comme argument le nom du fichier ou le chemin du fichier. Elle retourne un objet Image que vous pouvez alors utiliser comme Bitmap. Voici un exemple:

private void btnPicture_Click(object sender, PaintEventArgs e)
{
    Bitmap bmpPhoto = (Bitmap)Image.FromFile("professionals.png");
}

Practical LearningEtude Pratique: Obtenir une Imagr

  1. Copiez et mettez l'image suivante dans le dossier PictureView1\PictureViewer1\bin\Release de ce project
     
    Horizon
  2. Retournez au formulaire et double-cliquez son corps
  3. Implimentez l'événement comme suit:
     
    private void Form1_Load(object sender, EventArgs e)
    {
                PhotoMise = false;
                strPhoto = "horizon.jpg";
    }
  4. Sauvegardez le formulaire

Créer un Graphique à Partir d'une Bitmap

Dans notre introduction aux graphiques, nous avions vu plusieurs manières d'obtenir an objet Graphics, soit en appelant la méthode CreateGraphics() d'une classe dérivée de Control ou à partir d'un handle du contrôle. En dehors de ces techniques, la classe Graphics fournit une méthode nommée FromImage. Sa syntaxe est:

public static Graphics FromImage(Image image);

Cette méthode statique prend comme argument une variable de type Image. Par conséquent, quand vous appelez cette méthode, passez une variable de type Image ou d'une classe dérivée d'Image. Après que la méthode ait été appelée, elle produit un cobjet de type Graphics.

Ouvrir un Fichier pour Image

Dans votre application, vous pourriez vouloir permettre à l'utilisateur d'ouvrir une image comme fichier. Pour permettre à l'utilisateur d'ouvrir une image dans votre application, vous pouvez ajouter un contrôle OpenFileDialog OpenFileDialog à un formulaire de votre application.

Practical LearningEtude Pratique: Ouvrir une Photo

  1. Dans la section Boîtes de Dialogues de la Boîte à Outils, cliquez le boutton OpenFileDialog OpenFileDialog et cliquez le formulaire
  2. En utilisant la fenêtre des Propriétés, changez les following charactéristiques:
    (Name): ofdPhoto
    DefaultExt: bmp
    Filter: Bitmap Files (*.bmp)|*.bmp|JPEG Files (*.jpg,*.jpeg)|*.jpg|GIF Files (*.gif)|*.gif|PNG Files (*.png)|*.png
    Title: Ouvrir une Photo
  3. Sur le formulaire, double-cliquez le button et implimentez son événement comme suit:
     
    private void btnOuvrirPhoto_Click(object sender, EventArgs e)
    {
                // Montrez la boîte de dialog à l'utilisateur.
                // Si l'utilisateur a cliqué OK après l'avoir utilisé
                if (ofdPhoto.ShowDialog() == DialogResult.OK)
                {
                    // Stoquez le fichier dans la variable
                    strPhoto = this.ofdPhoto.FileName;
                    PhotoMise = false;
                    Invalidate();
                }
    }
  4. Sauvegardez tout

Présenter une Bitmap

Une fois qu'une image est prête, pour la présenter à l'utilisateur, vous pouvez appeler la méthode Graphics.DrawImage() qui est disponible en plusieurs différentes versions. L'une des versions de cette méthode utilise la syntaxe suivante:

public void DrawImage(Image img, int x, int y);

Le premier argument peut être une bitmap. Les deux autres arguments représentent la position que l'image utilisera.

Les Charactéristiques d'une Bitmap

 

La Position d'une Bitmap

Pour représenter une image dans votre application, tel que sur un formulaire, la principale information que vous devez fournir est sa position. La position d'une image est la mesure, en pixels, de son coin en haut et à gauche par rapport à l'objet qui l'héberge:

La Position d'une Bitmap

A base de cette position, pour spécifier où montrer une image, vous pouvez passer les valeurs x et y comme le second et le troisième arguments, respectivement, de la méthode Graphics.DrawImage(). Voici un exemple:

private void btnShowPicture_Click(object sender, EventArgs e)
{
            Graphics graphique = CreateGraphics();
            Bitmap bmpPhoto = new Bitmap("woman1.jpg");

            graphique.DrawImage(bmpPhoto, 10, 12);
}

Vous pouvez aussi passer les valeurs de la position comme nombres décimaux. Pour le faire, vous pouvez appelez la version suivante de la méthode  Graphics.DrawImage():

public void DrawImage(Image image, float x, float y);

Voici un exemple:

private void btnShowPicture_Click(object sender, EventArgs e)
{
            Graphics graphique = CreateGraphics();
            Bitmap bmpPhoto = new Bitmap("woman1.jpg");

            graphique.DrawImage(bmpPhoto, 10.50f, 12.20F);
}

Vous pouvez aussi spécifier la position comme un objet de type Point. Si les propriétés du Point sont des intègres, vous pouvez utiliser la version suivante de la méthode de Graphics.DrawImage():

public void DrawImage(Image image, Point point);

Si les valeurs du Point sont des nombres décimaux, vous pouvez utiliser la version suivante:

public void DrawImage(Image image, PointF point);

Practical LearningEtude Pratique: Positionner une Image

  1. Cliquez le corps du formulaire
  2. Dans la fenêtre des Propriétés, cliquez le bouton Evénements et double-cliquez Paint
  3. Implimentez l'événement comme suit:
     
    private void Form1_Paint(object sender, PaintEventArgs e)
    {
            if (strPhoto != "")
            {
                    Image bmpPhoto = Image.FromFile(this.strPhoto);
                    e.Graphics.DrawImage(bmpPhoto, 10, 40);
                    PhotoMise = true;
            }
    }
  4. Exécutez l'application
     
    Aperçu d'Image
  5. Essayez d'ouvrir une photo
     
    Bitmap
  6. Fermez le formulaire et retournez à votre environnement de programmation

La Taille d'une image

Quand vous créez ou concevez un objet de type Bitmap, vous pouvez spécifier sa taille primaire. Pour le faire, vous pouvez utiliser le constructeur suivant:

public Bitmap(int largeur, int hauteur);

Les arguments largeur et hauteur peuvent être données comme suit:

private void btnShowPicture_Click(object sender, EventArgs e)
{
        Bitmap bmpSample = new Bitmap(450, 625);
}

Si vous avez une image, vous pouvez obtenir sa taille. Pour vous assister, la classe Image, le parent de la classe Bitmap, fournit la propriété Width, qui est de type intègre. De la même manière, pour vous donner la hauteur d'une image, la classe Image est équippée d'une propriété nommée Height, qui aussi est de type int. Voici un exemple qui obtenir les dimensions d'une image:

private void btnShowPicture_Click(object sender, EventArgs e)
{
        OpenFileDialog dlgOuvrir = new OpenFileDialog();

        if (dlgOuvrir.ShowDialog() == DialogResult.OK)
        {
                string strFilename = dlgOuvrir.FileName;
                Bitmap bmpPhoto = new Bitmap(strFilename);
                Graphics graphique = CreateGraphics();

                graphique.DrawImage(bmpPhoto, 120, 12);
                int width = bmpPhoto.Width;
                int height = bmpPhoto.Height;

                txtLargeur.Text = width.ToString();
                txtHauteur.Text = height.ToString();
        }
}

The Size of a Picture

Pour obtenir la largeur et la hauteur comme un seul objet, la classe Image fournit à ses enfants, tel que Bitmap, la propriété Size. Comme vous pourriez le déviner, la propriété Size est de type Size.

La Transparence d'une Bitmap

Pour fournir un support de transparence, la classe Bitmap est equippée d'une méthode nommée MakeTransparent qui est fournie en deux versions. La première version utilise la syntaxe suivante:

public void MakeTransparent();

Quand vous appelez cette méthode, elle demande au système d'exploitation de choisir la couleur utilisée pour la transparence. Dans la plupart des cas, le système d'exploitation sélectionne la couleur blanche pour la transparence. Par conséquent, quand vous montrez l'image, chaque section qui aurait une couleur (ou tache) blanche disparaittrait pour montrer son arrière. Voici un exemple:

Immeuble
private void Form1_Paint(object sender, PaintEventArgs e)
{
        Bitmap bmpBuilding = new Bitmap("immeuble.bmp");
        e.Graphics.DrawImage(bmpBuilding, 0, 0);

        Bitmap bmpMonument = new Bitmap("monument.bmp");
        bmpMonument.MakeTransparent();
        e.Graphics.DrawImage(bmpMonument, 200, 260);
}

Ceci produirait:

Transparence

Au lieu d'utiliser la couleur de défaut pour la transparence, vous pouvez spécifier votre propre couleur. Pour supporter ceci, la classe Bitmap fournit une autre version de la méthode MakeTransparent(). Sa syntaxe est:

public void MakeTransparent(Color transparentColor);

Avec cette méthode, au lieu de laisser le système d'exploitation déterminer la couleur de transparence, vous pouvez passer votre propre couleur comme argument. Voici un exemple:

Flying Bird Globe
private void Form1_Paint(object sender, PaintEventArgs e)
{
        Bitmap bmpFlying = new Bitmap("oiseau.bmp");
        e.Graphics.DrawImage(bmpFlying, 0, 0);

        Bitmap bmpGlobe = new Bitmap("globe.bmp");
        bmpGlobe.MakeTransparent(Color.Black);
        e.Graphics.DrawImage(bmpGlobe, 20, 120);
}

Ceci produirait:

Transparent

Practical LearningEtude Pratique: Utiliser la Transparence d'une image

  1. Pour créer un nouveau programme, au menu principal, cliquez Fichier -> Nouveau -> Projet...
  2. Dans la listes des Modèles, cliquez Application Windows Form
  3. Mettez le Nom comme ImageFloater et cliquez OK
  4. Dans la section Composants de la Boîte à Outils, cliquez Timer et cliquez le formulaire
  5. Pendant que le timer est encore sélectionné sous le formulaire, dans la fenêtre des Propriétés, changez la propriété Enabled en True et l'Interval en 1000
  6. Copiez les images suivantes et mettez les dans le dossier ImageFloater\ImageFloater\bin\release de ce projet:
     
    House Diamond
  7. Sous le formulaire, double-cliquez le contrôle timer1 et implimentez l'événnement comme suit:
     
    private void timer1_Tick(object sender, EventArgs e)
    {
            Bitmap bmpArea = new Bitmap(Width, Height);
            Graphics graphiqueArea = Graphics.FromImage(bmpArea);
    
            Bitmap bmpDiamond = new Bitmap("diamond.bmp");
            bmpDiamond.MakeTransparent();
    
            Bitmap bmpHouse = new Bitmap("house.bmp");
            graphArea.DrawImage(bmpHouse, 0, 0);
    
            Random rnd = new Random();
            int rndLeft = rnd.Next(bmpHouse.Width);
            int rndTop = rnd.Next(bmpHouse.Height);
            graphArea.DrawImage(bmpDiamond, rndLeft, rndTop);
    
            Graphics painter = Graphics.FromHwnd(Handle);
            painter.DrawImage(bmpArea, 0, 0);
    }
  8. Execute the application to see the result
 
 
 
 

Accueil Copyright © 2009, yevol.com