web-dev-qa-db-fra.com

Charger une image depuis des ressources

Je veux charger l'image comme ceci:

void info(string channel)
{
    //Something like that
    channelPic.Image = Properties.Resources.+channel
}

Parce que je ne veux pas faire

void info(string channel)
{
    switch(channel)
    {
        case "chan1":
            channelPic.Image = Properties.Resources.chan1;
            break;
        case "chan2":
            channelPic.Image = Properties.Resources.chan2;
            break;
    }
}

Est-ce que quelque chose comme ça est possible?

28
a1204773

Vous pouvez toujours utiliser System.Resources.ResourceManager qui renvoie la ResourceManager en cache utilisée par cette classe. Puisque chan1 et chan2 représentent deux images différentes, vous pouvez utiliser System.Resources.ResourceManager.GetObject(string name) qui renvoie un objet correspondant à votre saisie avec les ressources du projet.

Exemple

object O = Resources.ResourceManager.GetObject("chan1"); //Return an object from the image chan1.png in the project
channelPic.Image = (Image)O; //Set the Image property of channelPic to the returned object as Image

Avis : Resources.ResourceManager.GetObject(string name) peut renvoyer null si la chaîne spécifiée est introuvable dans les ressources du projet.

Merci,
J'espère que ça t'as aidé :)

45
Picrofo Software

Vous pouvez le faire en utilisant le ResourceManager :

public bool info(string channel)
{
   object o = Properties.Resources.ResourceManager.GetObject(channel);
   if (o is Image)
   {
       channelPic.Image = o as Image;
       return true;
   }
   return false;
}
10
huysentruitw

Essayez ceci pour WPF

StreamResourceInfo sri = Application.GetResourceStream(new Uri("pack://application:,,,/WpfGifImage001;Component/Images/Progess_Green.gif"));
picBox1.Image = System.Drawing.Image.FromStream(sri.Stream);
6
Roopsundar

ResourceManager fonctionnera si votre image est dans un fichier de ressources. S'il ne s'agit que d'un fichier dans votre projet (disons la racine), vous pouvez l'obtenir en utilisant quelque chose comme:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file = Assembly .GetManifestResourceStream("AssemblyName." + channel);
this.pictureBox1.Image = Image.FromStream(file);

Ou si vous êtes dans WPF:

    private ImageSource GetImage(string channel)
    {
        StreamResourceInfo sri = Application.GetResourceStream(new Uri("/TestApp;component/" + channel, UriKind.Relative));
        BitmapImage bmp = new BitmapImage();
        bmp.BeginInit();
        bmp.StreamSource = sri.Stream;
        bmp.EndInit();

        return bmp;
    }
2
xr280xr
    this.toolStrip1 = new System.Windows.Forms.ToolStrip();
    this.toolStrip1.Location = new System.Drawing.Point(0, 0);
    this.toolStrip1.Name = "toolStrip1";
    this.toolStrip1.Size = new System.Drawing.Size(444, 25);
    this.toolStrip1.TabIndex = 0;
    this.toolStrip1.Text = "toolStrip1";
    object O = global::WindowsFormsApplication1.Properties.Resources.ResourceManager.GetObject("best_robust_ghost");

    ToolStripButton btn = new ToolStripButton("m1");
    btn.DisplayStyle = ToolStripItemDisplayStyle.Image;
    btn.Image = (Image)O;
    this.toolStrip1.Items.Add(btn);

    this.Controls.Add(this.toolStrip1);
0
IR.Programmer