IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] Concaténation de Bitmaps dans un seul


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de papouAlain
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 127
    Par défaut [C#] Concaténation de Bitmaps dans un seul
    Je souhaite obtenir par code une image bitmap qui soit le résultat d'un collage horizontal de toutes les images d'une ImageList.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    				for(int i=0 ; i < theImages.Images.Count ; i++)
    				{
    					Bitmap result = ???;
    				}
    Mais je trouve pas dans Image ou Bitmap de quoi me rendre ce service ??
    et pas de surcharge de Graphics.DrawImage qui ne retourne l'image...
    Quel objet utiliser ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 23
    Par défaut
    Je ne connais pas toutes les finesses du graphisme, mais je crois que le
    principe c'est d'abord de créer un bitmap vide à la bonne taille, puis de lui
    affecter un objet Graphics qui te sert à copier les images de ta liste.

  3. #3
    Membre confirmé Avatar de papouAlain
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 127
    Par défaut
    ok, d'accord pour créer une image de la taille de l'image Resultat de concaténation
    (si dans mon exemple : ImagesOfTheCell est une collection d'images)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // création de la taille de l'image finale
    bmp = new Bitmap(ImagesOfTheCell.Count*SizeOfImages.Width, SizeOfImages.Height, g);
    ensuite je crée l'instance de gestion graphique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.Drawing.Graphics g = new Graphics();
    puis je parcours ma collection pour coller les images les unes à coté des autres horizontalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //on concatene toutes les Images de la collection en une seule
    for (i = 0 ; i < ImagesOfTheCell.Count ; i++)
    {
                 System.Drawing.Point p = new Point (SizeOfImages.Width*i, 0);
    	System.Drawing.Rectangle rect = new Rectangle (p, SizeOfImages);
    	g.DrawImage(ImagesOfTheCell.Item(i), rect);
    }
    Le problème c'est qu'il me copie l'image (forcément!!!) en haut à gauche de mon formulaire, moi cette image je veux la stocker pour ensuite pouvoir la coller où je veux.
    Ce que je ne trouve pas c'est comment rediriger l'image résultat vers un Bitmap et non vers l'écran...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 23
    Par défaut
    Au lieu de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Drawing.Graphics g = new Graphics();
    Il faut utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Graphics g = bmp.GraphicsFromImage();
    A vérifier si cette fonction est effective sur la classe Bitmap, je crois
    qu'elle est dans la classe Image.
    Ensuite tes fonctions Rectangle et Draw sont dirigées sur le bitmap et
    non l'écran.

  5. #5
    Membre confirmé Avatar de papouAlain
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 127
    Par défaut
    ben non,
    pas de GraphicsFromImage dans Bitmap, ni d'ailleurs dans Image.

    en plus je suis dans l'évenement paint du DataGridTextBoxColumn et je ne maitrise pas le Graphics qui m'est passé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, 
    			System.Windows.Forms.CurrencyManager source, int rowNum, 
    			System.Drawing.Brush backBrush, System.Drawing.Brush foreBrush, 
    			bool alignToRight)

  6. #6
    Membre expérimenté Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Par défaut
    Bonjour, ça ne répond pas exactement à ta question (en fait je n'ai pas tout compris mais qu'importe) mais voici un exemple qui va concaténer tous les jpg de Mes Images horizontalement et les enregistrer dans Mes Images sous le nom "concatenation.bmp"... C'est pas forcémment super optimisé mais au moins c'est facile à comprendre

    PS : La méthode dont il parle c'est Graphics.FromImage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
                //mesimages est la chaîne qui contient le chemin vers ... Mes Images !
                string mesimages = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
     
                //ImagesOfTheCell contiendra tous les fichiers ".jpg" de Mes Images !
                string[] ImagesOfTheCell = System.IO.Directory.GetFiles(mesimages, "*.jpg");
     
                //cwidth contiendra la largeur totale de l'image
                int cwidth = 0;
                //cheight contiendra la plus grande hauteur de toutes les images donc la hauteur de l'image finale.
                int cheight = 0;
                //bmplist contiendra tous les bitmaps de Mes Images, comme ça on ne les recharge pas deux fois ^^
                Bitmap[] bmplist = new Bitmap[ImagesOfTheCell.Length];
                for(int i = 0; i < ImagesOfTheCell.Length; i++)
                {
                    string str = ImagesOfTheCell[i];
                    //On charge le bitmap.
                    Bitmap bmp = new Bitmap(str);
                    bmplist[i] = bmp;
                    //On ajoute sa largeur à cwidth;
                    cwidth += bmp.Size.Width;
                    //Si la hauteur est plus grande alors on la redéfinit
                    cheight = Math.Max(cheight, bmp.Size.Height);
                }
     
                //Le bitmap final a donc une taille de cwidth, cheight.
                Bitmap finalbitmap = new Bitmap(cwidth, cheight);
                //On créé un nouveau Graphics à partir de finalbitmap.
                Graphics g = Graphics.FromImage(finalbitmap);
                //oldWidth contiendra la position en largeur de la prochaine image donc commence à 0.
                int oldWidth = 0;
                for(int i = 0; i < ImagesOfTheCell.Length; i++)
                {
                    //On recharge nos bitmaps de tout à l'heure
                    Bitmap bmp = bmplist[i];
                    //Point en haut à droite du rectangle.
                    System.Drawing.Point p = new Point(oldWidth, 0);
                    //On définit le rectangle.
                    System.Drawing.Rectangle rect = new Rectangle(p, bmp.Size);
                    //On dessine l'image dans finalbitmap via Graphics.DrawImage(..., ...);
                    g.DrawImage(bmp, rect);
                    //On ajoute à oldWidth la largeur de l'image qu'on vient de dessiner
                    oldWidth += bmp.Size.Width;
                }
                //Enfin, pour voir le résultat on enregistre le tout dans concatenation.bmp dans Mes Images.
                finalbitmap.Save(mesimages + "/concatenation.bmp");

Discussions similaires

  1. [AC-2007] Probleme pour Concaténer plusieurs enregistrements dans une seule colonne
    Par severik dans le forum Requêtes et SQL.
    Réponses: 23
    Dernier message: 08/11/2017, 15h15
  2. Réponses: 4
    Dernier message: 29/10/2010, 17h05
  3. Comment concaténer des champs dans un seul champ
    Par rj450 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/08/2010, 13h22
  4. Réponses: 24
    Dernier message: 23/06/2009, 17h06
  5. "concaténer" plusieurs lignes dans un seul champ
    Par djobert dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/12/2008, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo