none
[c#] inverser une label comme dans une miroire RRS feed

  • Question

  • Bonjour 

    comment je peut afficher une label (Windows Form) inverser comme l'effet d'un miroir se n'est pas inverser l'ordre des lettres c'est retourner le label comme le miroir.

    jeudi 23 mai 2013 04:25

Réponses

  • Bonjour Akram Moncer,

    Peut être passer par un PictureBox et RotateFlip :

            private void button1_Click(object sender, EventArgs e)
            {
                Bitmap b; 
                Graphics g;
              
                b=new Bitmap(label1.Width+5, label1.Height);
                g = Graphics.FromImage(b);
                g.FillRectangle(new SolidBrush(Color.FromName("ButtonFace")), new Rectangle(0, 0, label1.Width+5, label1.Height));
                g.DrawString(label1.Text, label1.Font, Brushes.Black, new Point(0, 0));
                b.RotateFlip(RotateFlipType.RotateNoneFlipX);
                pictureBox1.Image = b;
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                label1.AutoSize = true;
                label1.Text = "Image en mirroir";
            }

    ce qui donne :

    Je crois, sans être définitif, que ScaleTransform ou RenderTransform sont liés à WPF et/ou SilverLight


    Cordialement, Jacques

    • Marqué comme réponse Akram Moncer vendredi 24 mai 2013 05:05
    jeudi 23 mai 2013 20:18

Toutes les réponses

  • Bonjour,

    Pour obtenir un effet miroir, selon ce que vous souhaitez soit appliquer un simple ScaleTransform à votre label :

    ScaleTransform st = new ScaleTransform(-1, 1);
    label1.RenderTransform = st;

    Ce qui va inverser le sens de chaque lettre et leur position dans le label.

    Par contre, si vous voulez juste réaliser une symétrie de chaque lettres sans inverser leurs positions respective alors il vous faudra extraire les lettres de votre label, stocker chaque lettres dans un Element pouvant être transformé et les replacer dans le bon ordre.


    Exemple :

    StackPanel stac = new StackPanel();
    stac.Orientation = Orientation.Horizontal;
    
    ScaleTransform st = new ScaleTransform(-1, 1);
    
    string content = (string)label1.Content;
    
    foreach(char c in content)
    {
    	Label lbl = new Label();
    	lbl.Content = c;
    	lbl.RenderTransform = st;
    	stac.Children.Add(lbl);
    }
    
    label1.Content = stac;
    label1.Padding = new Thickness(0);

    jeudi 23 mai 2013 13:41
  • désolé mais je n'ai pas trouver les objet que tu m'as conseillé d'utiliser. Je tien à préciser que je travail en c# sur un projet windows Form.
    jeudi 23 mai 2013 18:19
  • Bonjour Akram Moncer,

    Peut être passer par un PictureBox et RotateFlip :

            private void button1_Click(object sender, EventArgs e)
            {
                Bitmap b; 
                Graphics g;
              
                b=new Bitmap(label1.Width+5, label1.Height);
                g = Graphics.FromImage(b);
                g.FillRectangle(new SolidBrush(Color.FromName("ButtonFace")), new Rectangle(0, 0, label1.Width+5, label1.Height));
                g.DrawString(label1.Text, label1.Font, Brushes.Black, new Point(0, 0));
                b.RotateFlip(RotateFlipType.RotateNoneFlipX);
                pictureBox1.Image = b;
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                label1.AutoSize = true;
                label1.Text = "Image en mirroir";
            }

    ce qui donne :

    Je crois, sans être définitif, que ScaleTransform ou RenderTransform sont liés à WPF et/ou SilverLight


    Cordialement, Jacques

    • Marqué comme réponse Akram Moncer vendredi 24 mai 2013 05:05
    jeudi 23 mai 2013 20:18
  • merci mon ami ça m'aide beaucoup.
    vendredi 24 mai 2013 05:05