Carregar imagem da área de resources do projeto em c #

Eu tenho uma imagem no meu projeto armazenado em Recursos / myimage.jpg. Como posso carregar dinamicamente essa imagem no object Bitmap?

Você está usando o Windows Forms? Se você adicionou a imagem usando a interface do usuário Properties / Resources, obtém access à imagem a partir do código gerado, portanto, basta fazer isso:

var bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.myimage); 

Você pode obter uma referência para a imagem da seguinte maneira:

 Image myImage = Resources.myImage; 

Se você quiser fazer uma cópia da imagem, será necessário fazer o seguinte:

 Bitmap bmp = new Bitmap(Resources.myImage); 

Não se esqueça de descartar o bmp quando terminar. Se você não souber o nome da imagem do recurso em tempo de compilation, poderá usar um gerenciador de resources:

 ResourceManager rm = Resources.ResourceManager; Bitmap myImage = (Bitmap)rm.GetObject("myImage"); 

O benefício do ResourceManager é que você pode usá-lo onde o Resources.myImage normalmente estaria fora do escopo ou onde você deseja acessar dinamicamente os resources. Além disso, isso funciona para sons, arquivos de configuração etc.

Você precisa carregá-lo a partir do stream de resources.

 Bitmap bmp = new Bitmap( System.Reflection.Assembly.GetEntryAssembly(). GetManifestResourceStream("MyProject.Resources.myimage.png")); 

Se você quiser saber todos os nomes de resources em sua assembly, vá com:

 string[] all = System.Reflection.Assembly.GetEntryAssembly(). GetManifestResourceNames(); foreach (string one in all) { MessageBox.Show(one); } 

Muito mais fácil do que todas as respostas propostas

 tslMode.Image = global::ProjectName.Properties.Resources.ImageName; 

A melhor coisa é adicioná-los como resources de imagem nas configurações de resources no projeto. Então você pode obter a imagem diretamente fazendo Resources.myimage. Isto irá obter a imagem através de uma propriedade C # gerada.

Se você acabou de definir a imagem como Recurso Incorporado, você pode obtê-lo com:

 string name = "Resources.myimage.jpg" string namespaceName = "MyCompany.MyNamespace"; string resource = namespaceName + "." + name; Type type = typeof(MyCompany.MyNamespace.MyTypeFromSameAssemblyAsResource); Bitmap image = new Bitmap(type.Assembly.GetManifestResourceStream(resource)); 

Onde MyTypeFromSameAssemblyAsResource é qualquer tipo que você tenha em seu assembly.

Código que uso em vários dos meus projetos … Ele supõe que você armazene imagens no recurso somente como bitmaps e não como icons

  public static Bitmap GetImageByName(string imageName) { System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); string resourceName = asm.GetName().Name + ".Properties.Resources"; var rm = new System.Resources.ResourceManager(resourceName, asm); return (Bitmap)rm.GetObject(imageName); } 

Com e ImageBox chamado “ImagePreview FormStrings.MyImageNames contém um método de conversão de seqüência de caracteres get / set regular, que são vinculados a uma lista de tipo de checkbox de rolagem. As imagens têm os mesmos nomes vinculados na lista, exceto para as terminações .bmp. bitmaps são arrastados para o resources.resx

 Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames); Bitmap myImage = (Bitmap)rm; ImagePreview.Image = myImage; 

No meu caso – eu estava usando icons no meu recurso, mas eu precisava adicioná-los dinamicamente como imagens para alguns ToolStripMenuItem (s). Portanto, no método que criei (que é de onde vem o trecho de código abaixo), precisei converter os resources de ícone em bitmaps antes que eu pudesse retorná-los para adição ao meu MenuItem .

 string imageName = myImageNameStr; imageName = imageName.Replace(" ", "_"); Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName); return myIcon.ToBitmap(); 

Algo mais a ter em conta, se a sua imagem / ícone tiver espaços (“”) no nome quando os adicionar ao seu recurso, o VS replaceá automaticamente esses espaços por “_” (s). Porque espaços não são um caractere válido ao nomear seu recurso. É por isso que estou usando o método Replace() no meu código de referência. Você pode simplesmente ignorar essa linha.

Eu sugiro:

 System.Reflection.Assembly thisExe; thisExe = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream file = thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg"); Image yourImage = Image.FromStream(file); 

De msdn: http://msdn.microsoft.com/en-us/library/aa287676(v=vs.71).aspx

Usando Image.FromStream é melhor porque você não precisa saber o formato da imagem (bmp, png, …).

A resposta da JDS funcionou melhor. Imagem de carregamento de exemplo C #:

  • Inclua a imagem como Resource (Project tree-> Resources, clique com o botão direito para adicionar o arquivo desejável ImageName.png)
  • Recurso incorporado (tree de projeto-> Recursos-> ImageName.png, clique com o botão direito do mouse em selecionar propriedades)
  • formato de arquivo .png (.bmp .jpg também deve ser OK)

pictureBox1.Image = ProjectName.Properties.Resources.ImageName;

Observe os seguintes:

  • O arquivo de imagem do recurso é “ImageName.png”, a extensão do arquivo deve ser omitida.
  • ProjectName talvez seja mais adequadamente entendido como “Nome do assembly”, que deve ser a respectiva input de texto na página Project-> Properties.

A linha de código de exemplo é executada com sucesso usando a Comunidade do VisualStudio 2015.

Você também pode salvar o bmp em um var como este:

 var bmp = Resources.ImageName; 

espero que ajude!

Por estranho que pareça, ao investigar o designer, descobri o que parece ser uma abordagem muito mais simples:

A imagem parece estar disponível em .Properties.Resources.

Estou simplesmente usando uma imagem, pois tudo o que me interessa é colá-la em um controle com uma imagem nela.

(Net 4.0, VS2010.)

Eu olhei para o código de designer de um dos meus projetos e notei que ele usou essa notação

 myButton.Image = global::MyProjectName.Properties.Resources.max; 

em que max é o nome do recurso que carreguei no projeto.

Use abaixo de um. Eu testei isso com a célula de visualização de grade do formulário do Windows.

 Object rm = Properties.Resources.ResourceManager.GetObject("Resource_Image"); Bitmap myImage = (Bitmap)rm; Image image = myImage; 

Nome de “Resource_Image”, você pode encontrar no projeto.

Sob o nome do projeto, você pode encontrar Properties . Expanda-o Lá você pode ver o arquivo Resources.resx . Abra. Aplique o nome do seu arquivo como “Resource_Image”.

Ou você pode usar essa linha ao lidar com o WPF ou o Silverlight, especialmente onde você já tem a string de origem na marcação XAML:

 (ImageSource)new ImageSourceConverter().ConvertFromString(ImagePath); 

Onde o ImagePath é algo como:

 string ImagePath = "/ProjectName;component/Resource/ImageName.png"; 
 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);